APIs are proliferating on the web, providing app developers with ready access to a wide range of data and services, yet very few apps take advantage of more than one or two API providers. Arbitrary inconsistencies between APIs -- from authentication to input/output formats to details as small as timestamps or pagination -- mean every new API brings its own unnecessarily redundent learning curve, draining developer's most precious resource: time.
Temboo is part of an emerging class of services for managing and scaling API usage. By NORMALIZING access to APIs (as well as their associated documentation and credentials) these services do for development what PaaS and server virtualization have already done for app deployment and infrastructure. "Code virtualization", whereby all the tedious details of API access are abstracted away in standardized cloud-based processes, will free developers to spend their time writing only the code that actually makes their app unique. And that means more unique apps for everyone.
6. COPYRIGHT TEMBOO 2013
Where are all the apps?
! 9,970 APIs as of this morning
• programmableweb.com/apis/directory
! There’s an explosion of amazing APIs on the web
right now, but...
! Most apps only connect to a single API (or a handful
of similar APIs)
7. COPYRIGHT TEMBOO 2013
Two Problems
! How do I connect to this API?
! How do I make sure my app keeps working?
8. COPYRIGHT TEMBOO 2013
New learning curve per API
! How does this API conceptually fit together?
! How does this API handle the details?
• Calling methods?
• Data formats? (JSON or XML?)
• Authentication?
• Language support?
• Dates? Boolean values? Pagination?
• Etc. etc.
9. COPYRIGHT TEMBOO 2013
More fragility per API
! How to track API updates?
! How to test API integration points?
! How to effectively migrate between APIs?
10. COPYRIGHT TEMBOO 2013
This is an API publisher problem too
! If you build it, they won’t (necessarily) come
! …and if they do, they might hate you for it
11. COPYRIGHT TEMBOO 2013
How can API publishers help?
! Thinking different isn’t always a good thing
• REST is (usually) best
• Oauth 2.0 or HTTP Basic authentication
• Support both JSON and XML
• Keep your implementation details private
12. COPYRIGHT TEMBOO 2013
How can API publishers help?
! Understand that an API is a social contract
• “It should keep working”
• Minimize churn
• Announce changes early, and loudly
• Bake in versioning
/myapi/v1.0/myresource
13. COPYRIGHT TEMBOO 2013
How can API publishers help?
! Discoverability is your most important feature
• Documentation
• WSDL… or not
• JSON Discovery
www.googleapis.com/discovery/v1/apis
• Client libraries
14. COPYRIGHT TEMBOO 2013
How can API publishers help?
! Benefits of client libraries
• Enforce API consistency
• Provide a test harness
• Reduce user friction
• Help you think like an API consumer
15. COPYRIGHT TEMBOO 2013
Code generation is the answer
Expose language-agnostic metadata
github.com/wornik/swagger-codegen
var findById = {!
'spec': {!
"description" : ”Find pet by ID",!
"path" : "/pet.{format}/{petId}",!
"summary" : "Find pet by ID",!
"method": "GET",!
"params" : [swagger.pathParam("petId", "ID of pet", "string")],!
"responseClass" : "Pet",!
"nickname" : "getPetById"!
},!
'action': function (req,res) {!
…function body here…!
}!
};!
16. COPYRIGHT TEMBOO 2013
Code generation is the answer
Use metadata to generate client libraries
www.stringtemplate.org
/*!
$description$!
*/!
var $nickname$ = function(!
$params.fields:{paramName)$};separator=", "$,!
callback, errorCallback) { !
!
var options = { !
!method: $method$, !
!hostname: $host$, !
!path: getReqPath($path$, $params$), !
}; !
var request = http.request(options, !
!function(response) { !
!responseHandler(response, callback,errorCallback); !
});!
}!
17. COPYRIGHT TEMBOO 2013
How can API publishers help?
! Make your APIs device-friendly
• Worry about data size
• Provide alternatives to Oauth
19. COPYRIGHT TEMBOO 2013
What about API consumers?
! Keep API integrations abstract and modular
! Generalized open-source libraries
! API management platforms
• We all love infrastructure virtualization…
• What about… code virtualization?
20. COPYRIGHT TEMBOO 2013
Temboo
! Collects and normalizes APIs to give you one
consistent interface (“Choreographies”)
! All the power of multiple APIs
! Just one learning curve
30. COPYRIGHT TEMBOO 2013
Temboo
! Search Twitter (PHP)
$session = new Temboo_Session('matthew', ’myApp', ’demo');!
!
// Instantiate the Choreo!
$choreo = new Twitter_Search_Tweets($session);!
!
// Get an input object for the Choreo and set credential!
$inputs = $choreo ->newInputs();!
$inputs->setCredential('TwitterOAuthCredential');!
!
// Set inputs!
$inputs->setQuery("Yac2013");!
!
// Execute Choreo and get results!
$results = $choreo->execute($inputs)->getResults();!
31. COPYRIGHT TEMBOO 2013
Temboo
! Search Flickr (PHP)
$session = new Temboo_Session('matthew', ’myApp', ’demo');!
!
// Instantiate the Choreo!
$choreo = new Flickr_Photos_SearchPhotos($session);!
!
// Get an input object for the Choreo and set credential!
$inputs = $choreo ->newInputs();!
$inputs->setCredential(’FlickrOAuthCredential');!
!
// Set inputs!
$inputs->setText("Yac2013");!
!
// Execute Choreo and get results!
$results = $choreo->execute($inputs)->getResults();!
32. COPYRIGHT TEMBOO 2013
Temboo
! Search Dropbox (PHP)
$session = new Temboo_Session('matthew', ’myApp', ’demo');!
!
// Instantiate the Choreo!
$choreo = new Dropbox_FilesAndMetadata_SearchFilesAndFolders($session);!
!
// Get an input object for the Choreo and set credential!
$inputs = $choreo ->newInputs();!
$inputs->setCredential(’DropboxOAuthCredential');!
!
// Set inputs!
$inputs->setQuery("Yac2013");!
!
// Execute Choreo and get results!
$results = $choreo->execute($inputs)->getResults();!
33. COPYRIGHT TEMBOO 2013
Temboo
! Search Dropbox (PHP)
$session = new Temboo_Session('matthew', ’myApp', ’demo');!
!
// Instantiate the Choreo!
$choreo = new Dropbox_FilesAndMetadata_SearchFilesAndFolders($session);!
!
// Get an input object for the Choreo and set credential!
$inputs = $choreo ->newInputs();!
$inputs->setCredential(’DropboxOAuthCredential');!
!
// Set inputs!
$inputs->setQuery("Yac2013");!
!
// Execute Choreo and get results!
$results = $choreo->execute($inputs)->getResults();!
34. COPYRIGHT TEMBOO 2013
Temboo
! Search Foursquare (PHP)
$session = new Temboo_Session('matthew', ’myApp', ’demo');!
!
// Instantiate the Choreo!
$choreo = new Foursquare_Venues_SearchVenues($session);!
!
// Get an input object for the Choreo and set credential!
$inputs = $choreo ->newInputs();!
$inputs->setCredential(’FoursquareOAuthCredential');!
!
$inputs->setLatitude("40.7186300");!
$inputs->setLongitude("-74.055840");!
!
// Execute Choreo and get results!
$results = $choreo->execute($inputs)->getResults();!
37. COPYRIGHT TEMBOO 2013
Automation will transform APIs
! Code generation + frameworks
! Increasing standardization
! Decreasing friction
! An exciting time to be a developer