If you’re not building for mobile now, you will be soon.
Friday, June 24, 2011
WHAT’S DIFFERENT ABOUT MOBILE?
• Isn’t
REST appropriate for everything? I want a single API for all clients?
• Don’t
* You or your customer controls the mobile app.
Friday, June 24, 2011
WHAT IS REST?
Typical REST API implementation.
Friday, June 24, 2011
WHAT’S 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-speciļ¬c error codes & messages arrays of related or unrelated data pre-calculated data or data that doesn’t 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 •Don’t 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 closes your app exits tunnel
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