iPhone-Python Love Affair

Published on December 2016 | Categories: Documents | Downloads: 33 | Comments: 0 | Views: 371
of 39
Download PDF   Embed   Report

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

Comments

Content

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 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-specific 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

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 DOESN’T 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

Sponsor Documents

Or use your account on DocShare.tips

Hide

Forgot your password?

Or register your new account on DocShare.tips

Hide

Lost your password? Please enter your email address. You will receive a link to create a new password.

Back to log-in

Close