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

29
KISS REST API @yurevich, oDesk corp. ekb.py 2012 1

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

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

KISS REST API@yurevich, oDesk corp.

ekb.py 2012

1

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

Plan

• K.O.

• Good practices

• Real world sample

• Toolset

2

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

Good API

• Easy

• to use

• to read

• to extend

• Complete

• Consistent

3

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

REST

• stateless (no cookies & sessions)

• resources identification (URLs)

• representation (JSON, XML, YaML)

• manipulation of resources through representation

• self-descriptive messages

• hypermedia (Links)

4

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

Good samples

• Twitter API

• Twilio API

• Amazon S3 API

5

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

Writing specDocument it first

• Real use-cases

• Complete and closed set

• Future kills now

• Explicit versioning

7

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

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

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

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

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

Namespaces

• https://smsgate/v2/messages(or https://smsgate/20120210/messages) VS https://smsgate/messages

10

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

Resources

• Resources are NOUNs

• https://smsgate/v2/messages VShttps://smsgate/v2/send-message

11

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

URLs

• Required GET params must be part of URL

• http://smsgate/v2/messages/{id} instead of http://smsgate/v2/message?id={id}

12

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

Auth! SSL!

• https://smsgate/v2/messages VShttp://smsgate/v2/messages

• Poor man auth: token-based

• Production ready: oAuth2

13

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

Real world sample 0

• SMS Gate

• GET http://smsgate/sendMessage?number=780020000000&text=Send+it+please

14

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

Real world sample

• SMS Gate

• Resource: Text Message /message:

• Create new one (send) —POST /messages

• Get information about statusGET /messages/{id}

• version: 2

15

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

Real world sample 2

• POST https://smsgate2/v2/messages> message=Send%20it%20please&target=780020000000

• 201 CreatedLocation: https://smsgate2/v2/messages/242{‘target’: ‘78002000000’, ‘url’: ‘https://smsgate2/v2/message’, ‘status’: ‘queued’}

16

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

Toolset

• Documentation

• Backend

• Validation

• JSON generation

• What’s next?

17

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

Toolset: prototyping

• Red barrel

• External DSL (hello, PHP&Ruby)

• Self-documented

• Easy to distribute

• Only for prototyping

19

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

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

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

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

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

Django+TastyPie

• A lot of features

• Pure Resource, ModelResource

• Pagination

• In our team richest APIs are implemented in TastyPie

22

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

Toolset: Validation

• http://bitbucket.org/jek/flatland/

• Looks cool

• Not so obvious for nested structures

• Internals — OMG

23

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

Toolset: Validation

• https://github.com/Deepwalker/procrustes

• Data and forms validation

• Simple

• Good as prototype, not so good for production

• lack of documentation

24

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

Toolset: Validation

• https://github.com/Deepwalker/trafaret

• Very nice syntax

• Easy but supports complex nested structures

• Lack of documentation

• No forms validation

25

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

Toolset: JSON writer

• /dev/hands

• Ruby:

• https://github.com/inem/tequila

• https://github.com/nesquena/rabl

26

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

Surprise

• Dzen Python works for REST APIs

•curl http://pure-dawn-9186.herokuapp.com/import-this

28

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

Thanks

• Questions?

[email protected]

• follow me on twitter @yurevich

29