AN IPHONE-PYTHON LOVE AFFAIR
Building APIs for Mobile
Friday, June 24, 2011
Music Hack Day, February 2011
Samantha & Matt
Friday, June 24, 2011
ACCOMPLICE #1
Anna Callahan: iOS developer, jazz trumpet player @jazztpt
Friday, June 24, 2011
ACCOMPLICE #2
Nate Aune: Django/Python/Plone developer, saxophonist @natea
Friday, June 24, 2011
VALENTUN.ES!
Friday, June 24, 2011
http://www.youtube.com/watch?v=0C02wev40K0
Friday, June 24, 2011
MOBILE TAKEOVER
If youre not building for mobile now, you will be soon.
Friday, June 24, 2011
WHATS DIFFERENT ABOUT MOBILE?
Isnt
REST appropriate for everything? I want a single API for all clients?
Dont
* You or your customer controls the mobile app.
Friday, June 24, 2011
WHAT IS REST?
Typical REST API implementation.
Friday, June 24, 2011
WHATS DIFFERENT ABOUT MOBILE?
Mobile users are unwilling to wait. 1. Connection = slow, spotty, or non-existent
2. Mobile is not as powerful at fetching & saving data or calculations
Friday, June 24, 2011
CREATE AN API DOC
Friday, June 24, 2011
SO YOUR API SHOULD
Return
hierarchies of related data and Authorization
Authentication Have
mobile-specic error codes & messages arrays of related or unrelated data pre-calculated data or data that doesnt exist on device
Accept Return
Friday, June 24, 2011
HIERARCHIES OF DATA
Bad :(
Good!
Cards
Tracks
Friday, June 24, 2011
CARD CLASS
Friday, June 24, 2011
TRACK CLASS
Friday, June 24, 2011
SIMPLE REST API
Basic CRUD operations via API.
Friday, June 24, 2011
URLS.PY
Now access cards and tracks with /api/card/ and /api/track/
Friday, June 24, 2011
CREATE A CARD
Friday, June 24, 2011
WHAT ABOUT TRACKS?
Default post_list from resources.py (create object via POST)
Friday, June 24, 2011
WHAT ABOUT TRACKS?
api.py post_list (override method)
Friday, June 24, 2011
MOBILE WANTS HIERARCHICAL DATA
Friday, June 24, 2011
TASTYPIE MAKES IT EASY
Friday, June 24, 2011
AUTHENTICATION & AUTHORIZATION
Authentication - let the user in the door Authorization - what the user can see
Friday, June 24, 2011
LIMITING BY USER
Returns only the objects owned by the current user.
Friday, June 24, 2011
ERROR CODES
Ideally your API should:
Never return HTML Tailor response codes to actions on device Return messages designed for the end user Dont forget the App Store Never, ever return HTML
Friday, June 24, 2011
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
JSON ERROR RESPONSES
override wrap_view from resources.py
Friday, June 24, 2011
JSON ERROR HANDLING
Objective-C in Xcode
Friday, June 24, 2011
http://www.youtube.com/watch?v=maZxd8K7Tjc
Friday, June 24, 2011
ACCEPT ARRAYS OF DATA
User User User User
enters tunnel uses your app closesyour app exits tunnel
Friday, June 24, 2011
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
PRE-CALCULATED DATA OR DATA NOT STORED ON DEVICE
No
other users are stored on device or other calculated user data must come from the server
Leaderboards
Friday, June 24, 2011
TWITTER LEADERBOARD
Compete
with your friends shows daily statistics
Leaderboard Best
returned json for mobile:
[array of users containing username and [array of days containing num tweets, mentions, etc] ]
Friday, June 24, 2011
LEADERBOARD JSON
Friday, June 24, 2011
WHEN THIS DOESNT APPLY
Large
data sets -- only expose what client needs third-party clients client to set depth level a few special expected api calls
Multiple
Allow
Create
api/card/?depth=1 or send in json package, or send in the accept header
Friday, June 24, 2011
THANK YOU!
Music
Hack Day Accomplices: Matt Katz, Alexandre Passant, Jeff Novich, Twom Deryckere (Daniel Lindsley) - TastyPie
Danielzilla IsaacKelly
DjangoCon
Friday, June 24, 2011
VALENTUNES
Music
Hack Day: http://nyc.musichackday.org/ (Django code) https://github.com/natea/valentunes (iPhone code) https://github.com/jazztpt/Valentunes_iPhone (Twilio integration) https://github.com/terraces/valentunes-twilio
Valentunes
Valentunes
Valentunes
Friday, June 24, 2011
DJANGO API FRAMEWORKS
TastyPie
documentation (the one we used) http://readthedocs.org/docs/django-tastypie/en/latest/ https://bitbucket.org/jespern/django-piston/ REST framework http://django-rest-framework.org
django-piston
Django
Friday, June 24, 2011
QUESTIONS?
Blog
post with more detail on mobile api design: http://www.annacallahan.com/blog/2011/06/24/mobile-apidesign/ Callahan: annacallahan.com @jazztpt djangozoom.com @natea
Anna
Nate Aune:
Friday, June 24, 2011