• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
ekbpy'2012- Юрий Юревич - Как сделать REST API на Python
 

ekbpy'2012- Юрий Юревич - Как сделать REST API на Python

on

  • 2,743 views

 

Statistics

Views

Total Views
2,743
Views on SlideShare
1,105
Embed Views
1,638

Actions

Likes
0
Downloads
3
Comments
0

6 Embeds 1,638

http://ekbpy.ru 1444
http://www.ekbpy.ru 104
http://pep8.ru 86
http://translate.googleusercontent.com 2
http://web.archive.org 1
https://twitter.com 1

Accessibility

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    ekbpy'2012- Юрий Юревич - Как сделать REST API на Python ekbpy'2012- Юрий Юревич - Как сделать REST API на Python Presentation Transcript

    • KISS REST API @yurevich, oDesk corp. ekb.py 2012 1
    • Plan• K.O.• Good practices• Real world sample• Toolset 2
    • Good API• Easy • to use • to read • to extend• Complete• Consistent 3
    • REST• stateless (no cookies & sessions)• resources identification (URLs)• representation (JSON, XML,YaML)• manipulation of resources through representation• self-descriptive messages• hypermedia (Links) 4
    • Good samples• Twitter API• Twilio API• Amazon S3 API 5
    • Good practices• Though not so universal• http://blog.feedly.com/2009/05/06/best- practices-for-building-json-rest-web- services/• http://jacobian.org/writing/rest-worst- practices/ 6
    • Writing spec Document it first• Real use-cases• Complete and closed set• Future kills now• Explicit versioning 7
    • Beginners mistakes• Resource = model • Think about married couple• All methods should be implemented for every resource • Update user account activation? Delete sent SMS message?• Custom methods 8
    • Use nouns (learn passive voice)• User sends SMS message => A SMS message is created• Article is reviewed by editor => Review of article is created• The user deactivates account => User account activation is deleted 9
    • Namespaces• https://smsgate/v2/messages (or https://smsgate/20120210/messages) VS https://smsgate/messages 10
    • Resources• Resources are NOUNs• https://smsgate/v2/messages VS https://smsgate/v2/send-message 11
    • URLs• Required GET params must be part of URL • http://smsgate/v2/messages/{id} instead of http://smsgate/v2/message?id={id} 12
    • Auth! SSL!• https://smsgate/v2/messages VS http://smsgate/v2/messages• Poor man auth: token-based• Production ready: oAuth2 13
    • Real world sample 0• SMS Gate • GET http://smsgate/sendMessage? number=780020000000&text=Send+it +please 14
    • Real world sample• SMS Gate • Resource: Text Message /message: • Create new one (send) — POST /messages • Get information about status GET /messages/{id} • version: 2 15
    • Real world sample 2• POST https://smsgate2/v2/messages > message=Send%20it %20please&target=780020000000• 201 Created Location: https://smsgate2/v2/messages/242 {‘target’: ‘78002000000’, ‘url’: ‘https:// smsgate2/v2/message’, ‘status’: ‘queued’} 16
    • Toolset• Documentation• Backend• Validation• JSON generation• What’s next? 17
    • Toolset: documentation• Sphinx (ReST) • HTTP Domain — https://github.com/ deceze/Sphinx-HTTP-domain • httpdomain — https://bitbucket.org/ birkenfeld/sphinx-contrib• Markdown • https://github.com/coopernurse/doctorj 18
    • Toolset: prototyping• Red barrel • External DSL (hello, PHP&Ruby) • Self-documented • Easy to distribute • Only for prototyping 19
    • Flask• Simple• You get what you need• A lot of bootstrapping code • Attention to details • Chance to get hardcoded result• In our projects most load-intensive APIs are implemented using Flask 20
    • Django+Piston• Good set of features (for that time)• Built-in formatters • works well, on Accept header• Methods are strictly mapped to actions• Hard to reuse different forms in single handler• It’s obsolete 21
    • Django+TastyPie• A lot of features• Pure Resource, ModelResource• Pagination• In our team richest APIs are implemented in TastyPie 22
    • Toolset:Validation• http://bitbucket.org/jek/flatland/ • Looks cool • Not so obvious for nested structures • Internals — OMG 23
    • Toolset:Validation• https://github.com/Deepwalker/procrustes • Data and forms validation • Simple • Good as prototype, not so good for production • lack of documentation 24
    • Toolset:Validation• https://github.com/Deepwalker/trafaret • Very nice syntax • Easy but supports complex nested structures • Lack of documentation • No forms validation 25
    • Toolset: JSON writer• /dev/hands• Ruby: • https://github.com/inem/tequila • https://github.com/nesquena/rabl 26
    • What’s next?• JSON Schema • Validation • Discovery• http://json-schema.org/• http://nico.vahlas.eu/2010/04/23/json- schema-specifying-and-validating-json-data- structures/• http://shane.caraveo.com/2011/06/30/using- json-schema-for-exploring-api-servers/ 27
    • Surprise• Dzen Python works for REST APIs•curl http://pure- dawn-9186.herokuapp.com/ import-this 28
    • Thanks• Questions?• yyurevich@jellycrystal.com• follow me on twitter @yurevich 29