iphone-python love affair

39
AN IPHONE-PYTHON LOVE AFFAIR Building APIs for Mobile Friday, June 24, 2011

Upload: anna-callahan

Post on 26-Mar-2015

4.214 views

Category:

Documents


3 download

DESCRIPTION

How to build an API for mobile devices in Django and Tastypie

TRANSCRIPT

Page 1: iPhone-Python Love Affair

AN IPHONE-PYTHONLOVE AFFAIR

Building APIs for Mobile

Friday, June 24, 2011

Page 2: iPhone-Python Love Affair

Music Hack Day, February 2011

Samantha & Matt

Friday, June 24, 2011

Page 3: iPhone-Python Love Affair

ACCOMPLICE #1Anna Callahan: iOS developer, jazz trumpet player

@jazztpt

Friday, June 24, 2011

Page 4: iPhone-Python Love Affair

ACCOMPLICE #2Nate Aune: Django/Python/Plone developer, saxophonist

@natea

Friday, June 24, 2011

Page 5: iPhone-Python Love Affair

VALENTUN.ES!

Friday, June 24, 2011

Page 6: iPhone-Python Love Affair

http://www.youtube.com/watch?v=0C02wev40K0

Friday, June 24, 2011

Page 7: iPhone-Python Love Affair

MOBILE TAKEOVER

If you’re not building for mobile now, you will be soon.

Friday, June 24, 2011

Page 8: iPhone-Python Love Affair

• Isn’t REST appropriate for everything?

• Don’t I want a single API for all clients?

WHAT’S DIFFERENT ABOUT MOBILE?

* You or your customer controls the mobile app.

Friday, June 24, 2011

Page 9: iPhone-Python Love Affair

WHAT IS REST?

Typical REST API implementation.

Friday, June 24, 2011

Page 10: iPhone-Python Love Affair

WHAT’S DIFFERENT ABOUT MOBILE?

Mobile users are unwilling to wait.

2. Mobile is not as powerful at fetching & saving data or calculations

1. Connection = slow, spotty, or non-existent

Friday, June 24, 2011

Page 11: iPhone-Python Love Affair

CREATE AN API DOC

Friday, June 24, 2011

Page 12: iPhone-Python Love Affair

SO YOUR API SHOULD

• Return hierarchies of related data

• Authentication and Authorization

• Have mobile-specific error codes & messages

• Accept arrays of related or unrelated data

• Return pre-calculated data or data that doesn’t exist on device

Friday, June 24, 2011

Page 13: iPhone-Python Love Affair

HIERARCHIES OF DATA

Bad :( Good!

Cards Tracks

Friday, June 24, 2011

Page 14: iPhone-Python Love Affair

CARD CLASS

Friday, June 24, 2011

Page 15: iPhone-Python Love Affair

TRACK CLASS

Friday, June 24, 2011

Page 16: iPhone-Python Love Affair

SIMPLE REST API

Basic CRUD operations via API.Friday, June 24, 2011

Page 17: iPhone-Python Love Affair

URLS.PY

Now access cards and tracks with /api/card/ and /api/track/Friday, June 24, 2011

Page 18: iPhone-Python Love Affair

CREATE A CARD

Friday, June 24, 2011

Page 19: iPhone-Python Love Affair

WHAT ABOUT TRACKS?

Default post_list from resources.py (create object via POST)

Friday, June 24, 2011

Page 20: iPhone-Python Love Affair

WHAT ABOUT TRACKS?

api.py post_list (override method)

Friday, June 24, 2011

Page 21: iPhone-Python Love Affair

MOBILE WANTS HIERARCHICAL DATA

Friday, June 24, 2011

Page 22: iPhone-Python Love Affair

TASTYPIE MAKES IT EASY

Friday, June 24, 2011

Page 23: iPhone-Python Love Affair

AUTHENTICATION & AUTHORIZATION

Authentication - let the user in the doorAuthorization - what the user can see

Friday, June 24, 2011

Page 24: iPhone-Python Love Affair

LIMITING BY USER

Returns only the objects owned by the current user.

Friday, June 24, 2011

Page 25: iPhone-Python Love Affair

ERROR CODES

Ideally your API should:

•Never return HTML

•Tailor response codes to actions on device

•Return messages designed for the end user

•Don’t forget the App Store

•Never, ever return HTML

Friday, June 24, 2011

Page 26: iPhone-Python Love Affair

TAILOR ERROR CODES TO ACTIONS ON DEVICE

code 200 or 201 = success

code -10 = show alert; include user message

code -20 = show type x alert; log message

code -30 = don't alert user, but send certain info to the server

code -40 = try again

code -50 = push a web view and point it to this url

(a very simple example)

Friday, June 24, 2011

Page 27: iPhone-Python Love Affair

JSON ERROR RESPONSES

override wrap_view from resources.pyFriday, June 24, 2011

Page 28: iPhone-Python Love Affair

JSON ERROR HANDLING

Objective-C in Xcode

Friday, June 24, 2011

Page 29: iPhone-Python Love Affair

http://www.youtube.com/watch?v=maZxd8K7Tjc

Friday, June 24, 2011

Page 30: iPhone-Python Love Affair

ACCEPT ARRAYS OF DATA

• User enters tunnel

• User uses your app

• User closes your app

• User exits tunnel

Friday, June 24, 2011

Page 31: iPhone-Python Love Affair

ACCEPT ARRAYS OF DATA

{ "pointevents": [ { "datetime":"2011-06-19 14:33:02", "level":"1", "points":"92" } ], "awards": [ { "datetime":"2011-06-19 14:29:44", "award":"12", } ]}

Friday, June 24, 2011

Page 32: iPhone-Python Love Affair

PRE-CALCULATED DATA OR DATA NOT STORED ON

DEVICE

• No other users are stored on device

• Leaderboards or other calculated user data must come from the server

Friday, June 24, 2011

Page 33: iPhone-Python Love Affair

TWITTER LEADERBOARD

• Compete with your friends

• Leaderboard shows daily statistics

• Best returned json for mobile:

[array of users containing username and

[array of days containing num tweets, mentions, etc]

]

Friday, June 24, 2011

Page 34: iPhone-Python Love Affair

LEADERBOARD JSON

Friday, June 24, 2011

Page 35: iPhone-Python Love Affair

WHEN THIS DOESN’T APPLY

• Large data sets -- only expose what client needs

• Multiple third-party clients

• Allow client to set depth level

• Create a few special expected api calls

api/card/?depth=1

or send in json package, or send in the accept header

Friday, June 24, 2011

Page 36: iPhone-Python Love Affair

THANK YOU!

• Music Hack Day Accomplices: Matt Katz, Alexandre Passant, Jeff Novich, Twom Deryckere

• Danielzilla (Daniel Lindsley) - TastyPie

• IsaacKelly

• DjangoCon

Friday, June 24, 2011

Page 37: iPhone-Python Love Affair

VALENTUNES

• Music Hack Day:http://nyc.musichackday.org/

• Valentunes (Django code)https://github.com/natea/valentunes

• Valentunes (iPhone code)https://github.com/jazztpt/Valentunes_iPhone

• Valentunes (Twilio integration)https://github.com/terraces/valentunes-twilio

Friday, June 24, 2011

Page 38: iPhone-Python Love Affair

DJANGO API FRAMEWORKS

• TastyPie documentation (the one we used)http://readthedocs.org/docs/django-tastypie/en/latest/

• django-pistonhttps://bitbucket.org/jespern/django-piston/

• Django REST frameworkhttp://django-rest-framework.org

Friday, June 24, 2011

Page 39: iPhone-Python Love Affair

QUESTIONS?• Blog post with more detail on mobile api design:

http://www.annacallahan.com/blog/2011/06/24/mobile-api-design/

• Anna Callahan: annacallahan.com@jazztpt

• Nate Aune:djangozoom.com@natea

Friday, June 24, 2011