api reliability guide
DESCRIPTION
Creating a separate mobile website is a great idea until someone changes a data source on you. Your users don’t care if your LDAP is down or why they can’t pull up next the class schedule for next semester. In this session you will learn how to plan for the worst; network outages, slow response times and unorganized data. The mobile Web isn’t very useful without content and often that content is gathered from many sources that are out of the developers control. Gathering, protecting and organizing that data is the job of a smart developer and a successful mobile Web presence. This is accomplished by adding an API layer to everything you do. This session will walk you through the ins and outs of creating and maintaining a Web API that can extend far beyond your mobile presence.TRANSCRIPT
![Page 1: API Reliability Guide](https://reader033.vdocuments.mx/reader033/viewer/2022052301/555a7d6cd8b42abb628b48f1/html5/thumbnails/1.jpg)
API Reliability Guide
@nickdenardis / #psuweb12http://www.flickr.com/photos/erreeffe/3769670873/
![Page 2: API Reliability Guide](https://reader033.vdocuments.mx/reader033/viewer/2022052301/555a7d6cd8b42abb628b48f1/html5/thumbnails/2.jpg)
Nick DeNardis
Associate Director of Web Communications at Wayne State Universityhttp://wayne.edu/
Host of EDU Checkuphttp://educheckup.com/
Curator of EDU Snippitshttp://edusnippits.com/
Writer for .eduGuruhttp://doteduguru.com/
![Page 3: API Reliability Guide](https://reader033.vdocuments.mx/reader033/viewer/2022052301/555a7d6cd8b42abb628b48f1/html5/thumbnails/3.jpg)
DisclaimerSome assembly required.
![Page 4: API Reliability Guide](https://reader033.vdocuments.mx/reader033/viewer/2022052301/555a7d6cd8b42abb628b48f1/html5/thumbnails/4.jpg)
APIApplication Programming Interface
![Page 5: API Reliability Guide](https://reader033.vdocuments.mx/reader033/viewer/2022052301/555a7d6cd8b42abb628b48f1/html5/thumbnails/5.jpg)
Not just for robotshttp://www.flickr.com/photos/stevent/3241986538/
![Page 7: API Reliability Guide](https://reader033.vdocuments.mx/reader033/viewer/2022052301/555a7d6cd8b42abb628b48f1/html5/thumbnails/7.jpg)
The API’s job is to make the
developer as successful as
possible
http://knowyourmeme.com/memes/i-hate-sandcastles-success-kid
![Page 8: API Reliability Guide](https://reader033.vdocuments.mx/reader033/viewer/2022052301/555a7d6cd8b42abb628b48f1/html5/thumbnails/8.jpg)
It makes the user experience
http://www.flickr.com/photos/daychokesnight/2149714792/
can break
![Page 9: API Reliability Guide](https://reader033.vdocuments.mx/reader033/viewer/2022052301/555a7d6cd8b42abb628b48f1/html5/thumbnails/9.jpg)
Too slow...
http://www.flickr.com/photos/toolmantim/6170448143/
![Page 10: API Reliability Guide](https://reader033.vdocuments.mx/reader033/viewer/2022052301/555a7d6cd8b42abb628b48f1/html5/thumbnails/10.jpg)
Too complicated...http://www.flickr.com/photos/toolmantim/6170448143/
![Page 11: API Reliability Guide](https://reader033.vdocuments.mx/reader033/viewer/2022052301/555a7d6cd8b42abb628b48f1/html5/thumbnails/11.jpg)
Adds a layer
http://www.flickr.com/photos/jabb/6715983809/
![Page 12: API Reliability Guide](https://reader033.vdocuments.mx/reader033/viewer/2022052301/555a7d6cd8b42abb628b48f1/html5/thumbnails/12.jpg)
Complications with mobile
“always on”
![Page 13: API Reliability Guide](https://reader033.vdocuments.mx/reader033/viewer/2022052301/555a7d6cd8b42abb628b48f1/html5/thumbnails/13.jpg)
Mobile isn’t going anywhere
1.45 Million devices per day371,000 births per day
http://www.lukew.com/ff/entry.asp?1506
![Page 14: API Reliability Guide](https://reader033.vdocuments.mx/reader033/viewer/2022052301/555a7d6cd8b42abb628b48f1/html5/thumbnails/14.jpg)
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 15: API Reliability Guide](https://reader033.vdocuments.mx/reader033/viewer/2022052301/555a7d6cd8b42abb628b48f1/html5/thumbnails/15.jpg)
Mobile users use more bandwidth
![Page 16: API Reliability Guide](https://reader033.vdocuments.mx/reader033/viewer/2022052301/555a7d6cd8b42abb628b48f1/html5/thumbnails/16.jpg)
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 17: API Reliability Guide](https://reader033.vdocuments.mx/reader033/viewer/2022052301/555a7d6cd8b42abb628b48f1/html5/thumbnails/17.jpg)
0
10
20
30
40
2009 2010 2011 2012 2013 2014 2015 2016 2017
Mobile Desktop
Millions of visitors
http://wayne.edu/
![Page 18: API Reliability Guide](https://reader033.vdocuments.mx/reader033/viewer/2022052301/555a7d6cd8b42abb628b48f1/html5/thumbnails/18.jpg)
The mobile Web is slowAnd it’s mostly our fault
![Page 19: API Reliability Guide](https://reader033.vdocuments.mx/reader033/viewer/2022052301/555a7d6cd8b42abb628b48f1/html5/thumbnails/19.jpg)
Time
Cell Latency
Initial HTML
Javascript
Images
CSS
You can’t blame the network for everything
Time
Cell Latency
New Content
Images
Second RequestFirst Request
![Page 20: API Reliability Guide](https://reader033.vdocuments.mx/reader033/viewer/2022052301/555a7d6cd8b42abb628b48f1/html5/thumbnails/20.jpg)
Do less better
![Page 21: API Reliability Guide](https://reader033.vdocuments.mx/reader033/viewer/2022052301/555a7d6cd8b42abb628b48f1/html5/thumbnails/21.jpg)
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 22: API Reliability Guide](https://reader033.vdocuments.mx/reader033/viewer/2022052301/555a7d6cd8b42abb628b48f1/html5/thumbnails/22.jpg)
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 23: API Reliability Guide](https://reader033.vdocuments.mx/reader033/viewer/2022052301/555a7d6cd8b42abb628b48f1/html5/thumbnails/23.jpg)
Stick to REST
![Page 24: API Reliability Guide](https://reader033.vdocuments.mx/reader033/viewer/2022052301/555a7d6cd8b42abb628b48f1/html5/thumbnails/24.jpg)
XML suckshttp://www.flickr.com/photos/philmanker/3654636770/
![Page 25: API Reliability Guide](https://reader033.vdocuments.mx/reader033/viewer/2022052301/555a7d6cd8b42abb628b48f1/html5/thumbnails/25.jpg)
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 + ')');
Douglas Crockford
![Page 26: API Reliability Guide](https://reader033.vdocuments.mx/reader033/viewer/2022052301/555a7d6cd8b42abb628b48f1/html5/thumbnails/26.jpg)
Existing Resources
http://doteduguru.com/id7800-results-higher-ed-cms-usage-survey-2011.html
![Page 27: API Reliability Guide](https://reader033.vdocuments.mx/reader033/viewer/2022052301/555a7d6cd8b42abb628b48f1/html5/thumbnails/27.jpg)
Flattened highed = More interfaces
CRMCMS
iModulesEvents
Course ScheduleParkingFlickr
YouTubeFaculty ProfilesLibrary Catalog
![Page 28: API Reliability Guide](https://reader033.vdocuments.mx/reader033/viewer/2022052301/555a7d6cd8b42abb628b48f1/html5/thumbnails/28.jpg)
Your data is everywhere
CMS
Events
LDAP
Banner
Gather & Clean
Shadow storage
API Webserver
Website
Mobile Website
Mobile App
Digital Signage
Third Party
![Page 29: API Reliability Guide](https://reader033.vdocuments.mx/reader033/viewer/2022052301/555a7d6cd8b42abb628b48f1/html5/thumbnails/29.jpg)
API is the glue
CMS
Events
LDAP
Banner
Gather & Clean
Shadow storage
API Webserver
Website
Mobile Website
Mobile App
Digital Signage
Third Party
![Page 30: API Reliability Guide](https://reader033.vdocuments.mx/reader033/viewer/2022052301/555a7d6cd8b42abb628b48f1/html5/thumbnails/30.jpg)
Rolling your own API
Trust no one.
![Page 31: API Reliability Guide](https://reader033.vdocuments.mx/reader033/viewer/2022052301/555a7d6cd8b42abb628b48f1/html5/thumbnails/31.jpg)
Making the glue
Server space you controlapi.domain.edu or domain.edu/api
Ingredients:
Ability:
• Database• Cronjobs• Server logs• Analytics• PHP accelerator• Xdebug
![Page 32: API Reliability Guide](https://reader033.vdocuments.mx/reader033/viewer/2022052301/555a7d6cd8b42abb628b48f1/html5/thumbnails/32.jpg)
Getting data closer
![Page 33: API Reliability Guide](https://reader033.vdocuments.mx/reader033/viewer/2022052301/555a7d6cd8b42abb628b48f1/html5/thumbnails/33.jpg)
Documentation
Design
http://www.flickr.com/photos/edublogger/6950969837/
![Page 34: API Reliability Guide](https://reader033.vdocuments.mx/reader033/viewer/2022052301/555a7d6cd8b42abb628b48f1/html5/thumbnails/34.jpg)
![Page 35: API Reliability Guide](https://reader033.vdocuments.mx/reader033/viewer/2022052301/555a7d6cd8b42abb628b48f1/html5/thumbnails/35.jpg)
AffordanceThe physical design will communicate how it
is suppose to be usedhttp://www.flickr.com/photos/hawkexpress/269032594/
![Page 36: API Reliability Guide](https://reader033.vdocuments.mx/reader033/viewer/2022052301/555a7d6cd8b42abb628b48f1/html5/thumbnails/36.jpg)
/getNews/getNewsReleases/findPeople/getPerson/eventsList/eventInfo/eventRSVP/classSearch/semesterList/parkingLotList/parkingAvailable
![Page 37: API Reliability Guide](https://reader033.vdocuments.mx/reader033/viewer/2022052301/555a7d6cd8b42abb628b48f1/html5/thumbnails/37.jpg)
Create. Read. Update. Delete.
http://www.flickr.com/photos/fss/2181882493/
![Page 38: API Reliability Guide](https://reader033.vdocuments.mx/reader033/viewer/2022052301/555a7d6cd8b42abb628b48f1/html5/thumbnails/38.jpg)
Read first.
http://www.flickr.com/photos/hackaday/4425372655/
![Page 39: API Reliability Guide](https://reader033.vdocuments.mx/reader033/viewer/2022052301/555a7d6cd8b42abb628b48f1/html5/thumbnails/39.jpg)
GET /academic/colleges/listingGET /academic/colleges/info/150
REST
Category
Interface (Class)
Function
Item
![Page 40: API Reliability Guide](https://reader033.vdocuments.mx/reader033/viewer/2022052301/555a7d6cd8b42abb628b48f1/html5/thumbnails/40.jpg)
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 41: API Reliability Guide](https://reader033.vdocuments.mx/reader033/viewer/2022052301/555a7d6cd8b42abb628b48f1/html5/thumbnails/41.jpg)
The devil is in the details
Simple URL
Response code
Total count
Data container
Keep it lightweight
91 KB
![Page 42: API Reliability Guide](https://reader033.vdocuments.mx/reader033/viewer/2022052301/555a7d6cd8b42abb628b48f1/html5/thumbnails/42.jpg)
Use only what you need
Filters
Less data
41 KB
![Page 43: API Reliability Guide](https://reader033.vdocuments.mx/reader033/viewer/2022052301/555a7d6cd8b42abb628b48f1/html5/thumbnails/43.jpg)
Writing data
![Page 44: API Reliability Guide](https://reader033.vdocuments.mx/reader033/viewer/2022052301/555a7d6cd8b42abb628b48f1/html5/thumbnails/44.jpg)
POST /admissions/rfi/addPOST /admissions/visit/addPOST /admissions/application/add
POST /academic/colleges/addPOST /academic/colleges/edit
POST /academic/majors/addPOST /academic/majors/edit
Post data:id=3047
![Page 45: API Reliability Guide](https://reader033.vdocuments.mx/reader033/viewer/2022052301/555a7d6cd8b42abb628b48f1/html5/thumbnails/45.jpg)
Soft Delete(keep all the data!)
![Page 46: API Reliability Guide](https://reader033.vdocuments.mx/reader033/viewer/2022052301/555a7d6cd8b42abb628b48f1/html5/thumbnails/46.jpg)
POST /academic/colleges/remove
POST /academic/majors/remove
POST /academic/classes/remove
POST /parking/availability/remove
Post data:id=3047
![Page 47: API Reliability Guide](https://reader033.vdocuments.mx/reader033/viewer/2022052301/555a7d6cd8b42abb628b48f1/html5/thumbnails/47.jpg)
Authentication/api/user/auth
![Page 48: API Reliability Guide](https://reader033.vdocuments.mx/reader033/viewer/2022052301/555a7d6cd8b42abb628b48f1/html5/thumbnails/48.jpg)
Auth workflow
Request API Key Rate Limit
Check Credentials
Username/Pass
Session ID
Session ID
(Do work) Return
![Page 49: API Reliability Guide](https://reader033.vdocuments.mx/reader033/viewer/2022052301/555a7d6cd8b42abb628b48f1/html5/thumbnails/49.jpg)
Rate Limiting100 per minute per Key/IP
![Page 50: API Reliability Guide](https://reader033.vdocuments.mx/reader033/viewer/2022052301/555a7d6cd8b42abb628b48f1/html5/thumbnails/50.jpg)
Cache. Cache. Cache.
![Page 51: API Reliability Guide](https://reader033.vdocuments.mx/reader033/viewer/2022052301/555a7d6cd8b42abb628b48f1/html5/thumbnails/51.jpg)
Professional cache
http://www.flickr.com/photos/carlos/2417032795/
![Page 52: API Reliability Guide](https://reader033.vdocuments.mx/reader033/viewer/2022052301/555a7d6cd8b42abb628b48f1/html5/thumbnails/52.jpg)
APC
<?php$bar = 'BAR';apc_store('foo', $bar);var_dump(apc_fetch('foo'));?>
![Page 53: API Reliability Guide](https://reader033.vdocuments.mx/reader033/viewer/2022052301/555a7d6cd8b42abb628b48f1/html5/thumbnails/53.jpg)
Static Cache
http://www.flickr.com/photos/basic_sounds/5779597720/
![Page 54: API Reliability Guide](https://reader033.vdocuments.mx/reader033/viewer/2022052301/555a7d6cd8b42abb628b48f1/html5/thumbnails/54.jpg)
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 55: API Reliability Guide](https://reader033.vdocuments.mx/reader033/viewer/2022052301/555a7d6cd8b42abb628b48f1/html5/thumbnails/55.jpg)
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 56: API Reliability Guide](https://reader033.vdocuments.mx/reader033/viewer/2022052301/555a7d6cd8b42abb628b48f1/html5/thumbnails/56.jpg)
JSONP
function handle_data(data) { // `data` is now the object representation of the JSON data}
---http://some.tld/web/service?callback=handle_data:---handle_data({"data_1": "hello world", "data_2": ["the","sun","is","shining"]});
![Page 57: API Reliability Guide](https://reader033.vdocuments.mx/reader033/viewer/2022052301/555a7d6cd8b42abb628b48f1/html5/thumbnails/57.jpg)
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 58: API Reliability Guide](https://reader033.vdocuments.mx/reader033/viewer/2022052301/555a7d6cd8b42abb628b48f1/html5/thumbnails/58.jpg)
Our Stats
Feb 2011 - In production6.1 million requests
48% from mobile21% iOS23% Android66% Web
95% GET’s16 ms average response time
![Page 59: API Reliability Guide](https://reader033.vdocuments.mx/reader033/viewer/2022052301/555a7d6cd8b42abb628b48f1/html5/thumbnails/59.jpg)
Examples
![Page 60: API Reliability Guide](https://reader033.vdocuments.mx/reader033/viewer/2022052301/555a7d6cd8b42abb628b48f1/html5/thumbnails/60.jpg)
Mobile news
![Page 61: API Reliability Guide](https://reader033.vdocuments.mx/reader033/viewer/2022052301/555a7d6cd8b42abb628b48f1/html5/thumbnails/61.jpg)
![Page 62: API Reliability Guide](https://reader033.vdocuments.mx/reader033/viewer/2022052301/555a7d6cd8b42abb628b48f1/html5/thumbnails/62.jpg)
Google APImaps/locations/listing
events/event/listing
directory/people/listing
academic/courses/listing
![Page 63: API Reliability Guide](https://reader033.vdocuments.mx/reader033/viewer/2022052301/555a7d6cd8b42abb628b48f1/html5/thumbnails/63.jpg)
maps/category/listing
maps/location/info
events/event/listing
![Page 64: API Reliability Guide](https://reader033.vdocuments.mx/reader033/viewer/2022052301/555a7d6cd8b42abb628b48f1/html5/thumbnails/64.jpg)
faculty/profile/info
go/url/info
![Page 65: API Reliability Guide](https://reader033.vdocuments.mx/reader033/viewer/2022052301/555a7d6cd8b42abb628b48f1/html5/thumbnails/65.jpg)
HackathonCommunity through data
http://www.flickr.com/photos/hackny/5684887983/
![Page 66: API Reliability Guide](https://reader033.vdocuments.mx/reader033/viewer/2022052301/555a7d6cd8b42abb628b48f1/html5/thumbnails/66.jpg)
Resources
• http://apigee.com/
• http://rubyonrails.org/
• http://cakephp.org/
• https://groups.google.com/group/api-craft/
• http://37signals.com/svn/posts/3018-api-design-for-humans
• http://broadcast.oreilly.com/2011/06/the-good-the-bad-the-ugly-of-rest-apis.html
• http://sixrevisions.com/html/introduction-web-storage/
• http://webcomm.fiu.edu/2011/11/json-as-an-api-tool-and-why-its-awesome/
• http://doteduguru.com/id4579-results-higher-ed-cms-usage.html
![Page 67: API Reliability Guide](https://reader033.vdocuments.mx/reader033/viewer/2022052301/555a7d6cd8b42abb628b48f1/html5/thumbnails/67.jpg)
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 68: API Reliability Guide](https://reader033.vdocuments.mx/reader033/viewer/2022052301/555a7d6cd8b42abb628b48f1/html5/thumbnails/68.jpg)
Questions?Don’t be shy.