creating an effective mobile api

56
Creating API’s for Mobile Nick DeNardis

Upload: nick-denardis

Post on 29-Nov-2014

2.136 views

Category:

Technology


2 download

DESCRIPTION

Your visitors interact with content, not with your website. Content consistency is crucial to a successful user experience. Re-publishing is one option but it’s an inside-out action that relies on the authority controlling where the information goes. An API frees your data and the responsibility to where it is published and accessed. Mobile is a major consumer for your API but not every API is setup to handle the mass of requests coming from those devices. Learn how to mobile devices consume API’s with limited or low bandwidth and how to to tailor your API to be as efficient and effective as possible.http://environmentsforhumans.com/2012/doteduguru-summit/

TRANSCRIPT

Page 1: Creating an Effective Mobile API

Creating API’s for MobileNick DeNardis

Page 2: Creating an Effective Mobile API

@nickdenardis

Associate Director of Web Communications Wayne State Universityhttp://wayne.edu/

Host of EDU Checkuphttp://educheckup.com/

Curator of EDU Snippitshttp://edusnippits.com/

Writer for .eduGuruhttp://doteduguru.com/

Page 3: Creating an Effective Mobile API

Disclaimer

This talk is less about how to code an API but more about the strategy behind creating a flexible and resilient API.

Page 4: Creating an Effective Mobile API

API:Application programming interface

Page 5: Creating an Effective Mobile API

Not just for robots.http://www.flickr.com/photos/stevent/3241986538/

Page 6: Creating an Effective Mobile API

The API’s job is to make the developer as successful as possible

http://knowyourmeme.com/memes/i-hate-sandcastles-success-kid

Page 7: Creating an Effective Mobile API

Where isn’t it useful?

http://www.flickr.com/photos/daychokesnight/2149714792/

Page 8: Creating an Effective Mobile API

Too slow...

http://www.flickr.com/photos/toolmantim/6170448143/

Page 9: Creating an Effective Mobile API

Too complicated...http://www.flickr.com/photos/toolmantim/6170448143/

Page 10: Creating an Effective Mobile API

Adds a layer

http://www.flickr.com/photos/jabb/6715983809/

Page 11: Creating an Effective Mobile API

Complications with mobile“always on”

Page 12: Creating an Effective Mobile API

Mobile isn’t going anywhere

1.45 Million devices per day371,000 births per day

http://www.lukew.com/ff/entry.asp?1506

Page 13: Creating an Effective Mobile API

Mobile Data Traffic Expected To Rise 40-Fold Over Next Five Years

http://techcrunch.com/2010/03/30/mobile-data-traffic-rise-40-fold/

Page 14: Creating an Effective Mobile API

250 kb - Avg page weight2.5 pages - Avg number per visit

625 kb - Bandwidth per visit

Desktop

50 kb - Avg page weight25 pages - Avg number per visit

1.25 mb - Bandwidth per visit

Mobile

0

325

650

975

1300

Data

Desktop Mobile

Page 15: Creating an Effective Mobile API

0

10

20

30

40

2009 2010 2011 2012 2013 2014 2015 2016 2017

Mobile Desktop

Millions of visitors

http://wayne.edu/

Page 16: Creating an Effective Mobile API

The Mobile Web is SlowAnd it’s mostly our fault

Page 17: Creating an Effective Mobile API

Time

Cell Latency

Initial HTML

Javascript

Images

CSS

You can’t blame the network for everything

Page 18: Creating an Effective Mobile API

Time

Cell Latency

New Content

Images

Second Request

Page 19: Creating an Effective Mobile API

Do less better

Page 20: Creating an Effective Mobile API

One size != fit all

Think versioning from the start

https://api.twitter.com/1/https://us2.api.mailchimp.com/1.3/ https://api.foursquare.com/v2/https://api.instagram.com/v1/https://www.salesforce.com/services/Soap/c/18.0https://api.wayne.edu/v1/

Page 21: Creating an Effective Mobile API

SOAPThe request:

GET /StockPrice HTTP/1.1Host: example.orgContent-Type: application/soap+xml; charset=utf-8Content-Length: nnn

<?xml version="1.0"?><env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:s="http://www.example.org/stock-service"> <env:Body> <s:GetStockQuote> <s:TickerSymbol>IBM</s:TickerSymbol> </s:GetStockQuote> </env:Body></env:Envelope>

The response:

HTTP/1.1 200 OKContent-Type: application/soap+xml; charset=utf-8Content-Length: nnn

<?xml version="1.0"?><env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:s="http://www.example.org/stock-service"> <env:Body> <s:GetStockQuoteResponse> <s:StockPrice>45.25</s:StockPrice> </s:GetStockQuoteResponse> </env:Body></env:Envelope>

The request:

GET /StockPrice/IBM HTTP/1.1Host: example.orgAccept: text/xmlAccept-Charset: utf-8

The response:

HTTP/1.1 200 OKContent-Type: text/xml; charset=utf-8Content-Length: nnn

<?xml version="1.0"?><s:Quote xmlns:s="http://example.org/stock-service"> <s:TickerSymbol>IBM</s:TickerSymbol> <s:StockPrice>45.25</s:StockPrice></s:Quote>

REST

4 kb vs 2 kbRound Trip

Page 22: Creating an Effective Mobile API

Stick to REST

Page 23: Creating an Effective Mobile API

XML suckshttp://www.flickr.com/photos/philmanker/3654636770/

Page 24: Creating an Effective Mobile API

Your best friend JSON

Easy to encode:$arr = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5);json_encode($arr);

Easy to decode:$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';json_decode($json);

Javascript:var myObject = eval('(' + json + ')');

Page 25: Creating an Effective Mobile API

Existing Resources

http://doteduguru.com/id7800-results-higher-ed-cms-usage-survey-2011.html

Page 26: Creating an Effective Mobile API

Not everything is in the CMS

CMS

Events

LDAP

Banner

Gather & Clean

Shadow storage

API Webserver

Website

Mobile Website

Mobile App

Digital Signage

Third Party

Page 27: Creating an Effective Mobile API

Rolling your own APITrust no one.

Page 28: Creating an Effective Mobile API

Create. Read. Update. Delete.

http://www.flickr.com/photos/fss/2181882493/

Page 29: Creating an Effective Mobile API

Start with a map

http://www.flickr.com/photos/56684679@N08/6155875352/

Page 30: Creating an Effective Mobile API

Read first.

http://www.flickr.com/photos/hackaday/4425372655/

Page 31: Creating an Effective Mobile API

GET /academic/colleges/listingGET /academic/colleges/info

GET /academic/majors/listingGET /academic/majors/info

GET /academic/classes/listingGET /academic/classes/info

GET /parking/availability/listingGET /parking/availability/info

Page 32: Creating an Effective Mobile API

The devil is in the details

Simple URL

Response code

Total count

Data container

Keep it lightweight

91 KB

Page 33: Creating an Effective Mobile API

Use only what you need

Filters

Less data

41 KB

Page 34: Creating an Effective Mobile API

Writing data

Page 35: Creating an Effective Mobile API

POST /admissions/rfi/addPOST /admissions/visit/addPOST /admissions/application/add

POST /academic/colleges/addPOST /academic/colleges/edit

POST /academic/majors/addPOST /academic/majors/edit

Page 36: Creating an Effective Mobile API

Soft Delete(keep all the data!)

Page 37: Creating an Effective Mobile API

POST /academic/colleges/remove

POST /academic/majors/remove

POST /academic/classes/remove

POST /parking/availability/remove

Page 38: Creating an Effective Mobile API

Authentication/api/user/auth

Page 39: Creating an Effective Mobile API

Cache. Cache. Cache.

Page 40: Creating an Effective Mobile API

Professional cache

http://www.flickr.com/photos/carlos/2417032795/

Page 41: Creating an Effective Mobile API

APC

<?php$bar = 'BAR';apc_store('foo', $bar);var_dump(apc_fetch('foo'));?>

Page 42: Creating an Effective Mobile API

Ghetto cache

http://www.flickr.com/photos/basic_sounds/5779597720/

Page 43: Creating an Effective Mobile API

Static files

<?phpif ((is_file($_SERVER['SCRIPT_FILENAME'].'.json')) && (time()-filemtime($_SERVER['SCRIPT_FILENAME'].'.json') < 3600)) { readfile($_SERVER['SCRIPT_FILENAME'].'.json'); exit; }

// (the php script itself goes here)

echo $response;$fp = fopen($_SERVER['SCRIPT_FILENAME'].'.json', 'w');fwrite($fp, $response);fclose($fp);

?>

Page 44: Creating an Effective Mobile API

if (typeof(localStorage) == 'undefined' ) { alert('Your browser does not support HTML5 localStorage. Try upgrading.');} else { try { localStorage.setItem("name", "Hello World!"); //saves to the database, } catch (e) { if (e == QUOTA_EXCEEDED_ERR) { alert('Quota exceeded!'); //data wasn't successfully saved due to quota exceed so throw an error } } document.write(localStorage.getItem("name")); //Hello World! localStorage.removeItem("name"); //deletes the matching item from the database}

http://paperkilledrock.com/2010/05/html5-localstorage-part-one/

HTML5 localStorage

Page 45: Creating an Effective Mobile API

Expires header<?php header('Expires: '.gmdate('D, d M Y H:i:s \G\M\T', time() + 3600));?>

SemestersSubjectsDegreesMap CategoriesMap Locations

1 Month

CoursesMedia Experts

1 Week

Course AvailabilityParking Availability

No Cache

EventsNews

1 Day

Page 46: Creating an Effective Mobile API

Our StatsFeb 2011 - In production2.5 million requests

48% from mobile21% iOS23% Android66% Web

95% GET’s16 ms average response time

Page 47: Creating an Effective Mobile API

Examples

Page 48: Creating an Effective Mobile API

Mobile news

Page 49: Creating an Effective Mobile API

Google APImaps/locations/listing

events/event/listing

directory/people/listing

academic/courses/listing

Page 50: Creating an Effective Mobile API

maps/category/listing

maps/location/info

events/event/listing

Page 51: Creating an Effective Mobile API

faculty/profile/info

go/url/info

Page 52: Creating an Effective Mobile API

HackathonCommunity through data

http://www.flickr.com/photos/hackny/5684887983/

Page 54: Creating an Effective Mobile API

Hackathons

• http://dschool.stanford.edu/blog/2012/01/27/hack-d-kicks-off-more-than-a-dozen-projects-underway/

• http://civic.mit.edu/blog/schock/occupydata-hackathon-2-roundup

• http://newmed.media.mit.edu/health-and-wellness-innovation-2012

• http://nyuad.nyu.edu/hackathon/about/

• http://startup.berkeley.edu/hackathon/

• http://www.njit.edu/hackathon/

• http://www.lib.umich.edu/art-architecture-engineering-library/announcements/48-hour-mobile-app-hackathon

Page 55: Creating an Effective Mobile API

Questions?Don’t be shy.