api development - cdata zone
TRANSCRIPT
![Page 1: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/1.jpg)
API Development
Rob Richardsphp|tek 2012
http://xri.net/=rob.richards
HTTP
GET
SOAP
POST
REST
HTTPS
PUT
DELETE
JSON
XML
![Page 2: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/2.jpg)
API Development Pipedreams
![Page 3: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/3.jpg)
Teamwork
Successful APIsInvolve
The Entire Organization
![Page 4: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/4.jpg)
● Define the API● Design for Scale● Design for Failures● Design with Standards● Design for the Future
![Page 5: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/5.jpg)
User API
Manage system users● Ability to search by first, last or ID
● Ability to add, update and remove users
![Page 6: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/6.jpg)
But it's just a URL...
/user.php
/user/search.php/user/delete.php/user/update.php/user/create.php
/user/
/service.php
/service
![Page 7: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/7.jpg)
REST
SOAP
RPC
Pick Your Poison
![Page 8: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/8.jpg)
RESTful
● Data oriented● CRUD
● Simple● Based on simple HTTP and URI standards● Easy to consume
● Flexible● Allows any type of data format
● Performance● Calls can be much faster● Easier to scale● Browser firendy and cacheable
![Page 9: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/9.jpg)
RPC
● Operation (procedural) oriented● Natural to the developer
● Tools● Faster Development● Test suites
● Contractual● Standard formats
![Page 10: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/10.jpg)
JSON-RPC Example
Request$response = $client->subtract(23, 42);
{ "jsonrpc": "2.0", "method": "subtract", "params": { "subtrahend": 23, "minuend": 42 }, "id": 3}
Response{ "jsonrpc": "2.0", "result": 19, "id": 3}
![Page 11: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/11.jpg)
SOAP
● Message oriented● Contractual● More tools
● Security and Identity standards● Provides end to end reliability● ACID capabilities for atomic operations● Standard formats
![Page 12: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/12.jpg)
<?xml version="1.0" encoding="UTF-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:mi="http://www.Monson-Haefel.com/jwsbook/message-id" xmlns:proc="http://www.Monson-
Haefel.com/jwsbook/processed-by"> <soap:Header><!-- Header blocks go here --></soap:Header> <soap:Body> <po:purchaseOrder orderDate="2003-09-22" xmlns:po="http://www.Monson-Haefel.com/jwsbook/PO">
<po:accountName>Amazon.com</po:accountName> <po:accountNumber>923</po:accountNumber> ... <po:book> <po:title>J2EE Web Services</po:title> <po:quantity>300</po:quantity> <po:wholesale-price>24.99</po:wholesale-price> </po:book> </po:purchaseOrder> </soap:Body></soap:Envelope>
![Page 13: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/13.jpg)
REST
SOAP
RPC
Pick Your Poison
![Page 14: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/14.jpg)
But it's just a URL...
/user.php
/user/search.php/user/delete.php/user/update.php/user/create.php
/user/
/service.php
/service
![Page 15: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/15.jpg)
But it's just a URL...
/user.php
/user/search.php/user/delete.php/user/update.php/user/create.php
/user/
/service.php
/service
![Page 16: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/16.jpg)
idfnamelname
User
idfnamelnameemail
User
Current Data Structure
Future Data Structure
Plan for Change
![Page 17: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/17.jpg)
Versioning
/user/?v=1
/v1/user/
GET /user/ HTTP/1.1
Accept: application/vnd.company.api.user-v1+json
GET /user/ HTTP/1.1
X-API-Version: 1
V1 => V2 => V3
![Page 18: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/18.jpg)
Data Format
● Pre-defined● JSON● XML● Other?
SOAP
XML-RPC
JSON-RPC
--> {"jsonrpc": "2.0", "method": "subtract", "params": [42, 23], "id": 1}
<-- {"jsonrpc": "2.0", "result": 19, "id": 1}
![Page 19: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/19.jpg)
Data Format
● Pre-defined● JSON● XML● Other?
{ "items": [{ "firstname": "john", "lastname": "doe", "id": "1" }, { "firstname": "jane", "lastname": "doe", "id": "2" }, { "firstname": "joe", "lastname": "smith", "id": "3" }]}
![Page 20: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/20.jpg)
Data Format
● Pre-defined● JSON● XML● Other?
<?xml version="1.0"?><items> <item> <firstname>john</firstname> <lastname>doe</lastname> <id>1</id> </item> <item> <firstname>jane</firstname> <lastname>doe</lastname> <id>2</id> </item> <item> <firstname>joe</firstname> <lastname>smith</lastname> <id>3</id> </item></items>
![Page 21: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/21.jpg)
Data Format
● Pre-defined● JSON● XML● Other?
ãΩFHÌñmo€6Ä˝YøÇUÿI~K“FR`ÿB†ë…›ä!@†JT$Tíé€˚Ô;Rñ¢•Àúnk∑|æ–‰ΩËx<ΩMJfl≤MÁb«ìâOéßr¥F’òXìig8¥¨Òd2N¨é5çO¶d}À†j∂åG°•yúE4aOËÅZö~èÄæ/ˆ9æ¶u√Ε.ß∑-8ç†(v¯CÔLÎæΩ¿ü]yNo±”œbÒzÜ?-ÉÖ”K n∫K?/˝#&k£wÜL]A~Q›cnÛ"/ÔPB¯≠;º˘Ì¢rÕ2By∆x≠ÒXxì¬Àkßmr£é»(1ˇÉ¯ÿx52Ü∆–:Îs·¨vY‚]‹∏É=¸Ë¡fi¿Ol¥blÀ˛ÏK◊À`ÂÙNO¶Sò¡f^6†A%·'9GpAvàg9C∞¡*@GoÌ–êÈ—Î+q+‹FÆufl_Ω}„Õënü�ZËSñì“π—áÜu£üª¬M∏ö´U0ÛCPÉòK≈¥§–Ûµ»|,{ªº∏Ù]≥◊òg$ôGE·÷“Âæ[¯·ÌrÉÀ9)K,m≥%◊ÏMD£5´�∏ˆ}Tl±k3N·p›∫êlsø`õ{≥“� Æ.¥Ø6¨ãÒŸÜiA"ÓéÀ6´ü_òÕ&ÕV¢‰filÂâ£ı�(ësä#égéMûó«_HâE·∫≤&l≥ô⁄VF™‰ ¬≥Õf~»0fl‹FIB1cn}∑l≥µ¯ıÈ©´¸˘)™,˛◊iz0¨∑˜ó∆OÁhqŒóæÔÕWì≥»Y\›√GYy‰SˆË)M˜huàÍŒ�y2≠8öñÆpú§á∞rÈ_ p¯˙¶lñ�¯<òã˛âß&(|/ûpàRJ÷(ƒ%Íãé)tŒ–.Á4eåduèÓ¥Ç9ŸäñùoRqm[˙ –ı+2`≠ÀH¸9(£ıuæ6Õ˝ã°!˘>¿Ä)-I5B:Bckp¶Â)ÍøêN(…q_flãQø“ü5-›—
![Page 22: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/22.jpg)
Don't Believe the Hype!
![Page 23: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/23.jpg)
GET /v1/user/?searchby=fname&value=rob
POST /v1/user/{"id":3,"fname":"rob","lname":"unknown"}
PUT /v1/user/{"fname":"rob","lname":"richards"}
DELETE /v1/user/?id=3
A Bit Confusing
![Page 24: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/24.jpg)
GET /v1/user/?fname=rob
POST /v1/user/{"id":3,"fname":"rob","lname":"unknown"}
PUT /v1/user/{"fname":"rob","lname":"richards"}
DELETE /v1/user/?id=3
More Precise
![Page 25: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/25.jpg)
GET /v1/user/?fname=rob
POST /v1/user/3{"fname":"rob","lname":"unknown"}
PUT /v1/user/{"fname":"rob","lname":"richards"}
DELETE /v1/user/3
Proper Resource Identifiers
![Page 26: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/26.jpg)
But I Can't PUT or DELETE...
● Some Clients have no support for PUT/DELETE methods
● Common to use POST with _method parameter
POST /v1/user/?_method=PUT{"fname":"rob","lname":"richards"}
POST /v1/user/?id=3&_method=DELETE
![Page 27: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/27.jpg)
Data Structure – Get User
[{ "id": 3, "fname": "rob", "lname": "unknown"},{ "id": 4, "fname": "rob", "lname": "richards"}]
![Page 28: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/28.jpg)
Development
![Page 29: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/29.jpg)
curl -v "http://fizzer/v1/user/index2.php?fname=j"
curl -v -d'{"id":3,"fname":"rob","lname":"unknown"}' "http://fizzer/v1/user/index2.php"
curl -v -X PUT -d'{"fname":"rob","lname":"richards"}' "http://fizzer/v1/user/index2.php"
curl -v -X DELETE "http://fizzer/newtek/index2.php?id=2"
curl -v -d'{"fname":"rob","lname":"richards"}' "http://fizzer/newtek/index2.php?_method=PUT"
curl -v -d"" "http://fizzer/v1/user/index2.php?id=2&_method=DELETE"
Test Calls
![Page 30: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/30.jpg)
curl "http://fizzer/v1/user/index2.php"
[{"id":1,"fname":"john","0":"smith"},{"id":2,"fname":"jane","lname":"doe"},{"id":3,"fname":"rob","lname":"richards"}]
![Page 31: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/31.jpg)
curl -d'{"id":3,"fname":"rob","lname":"unknown"}' "http://fizzer/v1/user/index2.php"
<No Content in Response>
![Page 32: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/32.jpg)
curl -v -d'{"id":3,"fname":"rob","lname":"unknown"}' "http://fizzer/v1/user/index2.php"
< HTTP/1.1 200 OK< X-Powered-By: PHP/5.3.13< Content-type: text/html< Content-Length: 0< Date: Mon, 21 May 2012 21:07:33 GMT< Server: Mashery Proxy< * Connection #0 to host fizzer left intact* Closing connection #0
![Page 33: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/33.jpg)
curl -v -d'{"id":3,"me":"rob","ln":"unkn"}' "http://fizzer/v1/user/index2.php"
< HTTP/1.1 200 OK< X-Powered-By: PHP/5.3.13< Content-type: text/html< Content-Length: 0< Date: Mon, 21 May 2012 21:09:01 GMT< Server: Mashery Proxy< * Connection #0 to host fizzer left intact* Closing connection #0
![Page 34: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/34.jpg)
curl "http://fizzer/v1/user/index2.php?id=3"
[{"id":3,"fname":null,"lname":null}]
![Page 35: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/35.jpg)
HTTP Response Codes
Status Code Status Message
200 OK
301 Moved Permanently
302 Found
400 Bad Request
401 Not Authorized
403 Forbidden
404 Not Found
500 Internal Server Error
503 Service Unavailable
![Page 36: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/36.jpg)
curl -v -d'{"id":3,"me":"rob","ln":"unkn"}' "http://fizzer/v1/user/index3.php"
< HTTP/1.1 400 Bad Request< X-Powered-By: PHP/5.3.13< Content-type: text/html< Content-Length: 0< Date: Mon, 21 May 2012 22:15:13 GMT< Server: Mashery Proxy< * Connection #0 to host fizzer left intact* Closing connection #0
![Page 37: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/37.jpg)
Error Responses
● Some clients can not easily access status messages
● Not all servers can modify response status message
● Allows for verbose and descriptive errors● Helps developer debug problems● Keep error responses in same data format
when possible
![Page 38: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/38.jpg)
curl -v -d'{"id":3,"me":"rob","ln":"unkn"}' "http://fizzer/v1/user/index4.php"
< HTTP/1.1 400 Bad Request< X-Powered-By: PHP/5.3.13< Content-type: text/html< Transfer-Encoding: chunked< Date: Mon, 21 May 2012 22:25:53 GMT< Server: Mashery Proxy< * Connection #0 to host fizzer left intact* Closing connection #0{"error":{"code":400,"message":"Bad Request"}}
![Page 39: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/39.jpg)
Security
● Trust No One!● Expect that you will be attacked● Identity != Authentication● Authentication != Authorization● Security Posture Depends upon Exposed Data● Enforce the use of SSL
![Page 40: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/40.jpg)
Identity
apikey=2745529bacf89590115d3657ac9d0442
Typically Application Identifier
Good Practice: At least 22 characters
![Page 41: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/41.jpg)
Authentication/Authorization
● Dependent upon the consumer, owner and visibility of the data
● Identifier and HMAC● Username/Password
● Caution: Typically not recommended
● Out of App authentication with token usage● OAuth● SAML● WS-Security
![Page 42: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/42.jpg)
***DISCLAIMER***
For simplicity purposes and to demonstrate the inclusion of security in this exercise, the use of apikey and shared secret will be used to access the example API. In practice, something like OAuth should be used so the application access the data does not have access to the user credentials directly. The following events are fictional and not based on any actual events.
![Page 43: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/43.jpg)
curl "http://fizzer/v1/user/index5.php?fname=rob"
< HTTP/1.1 403 Forbidden< X-Powered-By: PHP/5.3.13< Content-type: text/html< Transfer-Encoding: chunked< Date: Mon, 21 May 2012 23:22:42 GMT< Server: Mashery Proxy< * Connection #0 to host fizzer left intact* Closing connection #0{"error":{"code":403,"message":"Not Authorized"}}
![Page 44: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/44.jpg)
curl -v 'http://fizzer/v1/user/index5.php?fname=j&apikey=2745529bacf89590115d3657ac9d0442&sig='$(php -r '$time=time();echo hash_hmac("sha256", "2745529bacf89590115d3657ac9d0442".$time, "1234567890")."×tamp=$time";')
< HTTP/1.1 200 OK< X-Powered-By: PHP/5.3.13< Content-type: text/html< Transfer-Encoding: chunked< Date: Tue, 22 May 2012 03:09:24 GMT< Server: Mashery Proxy< * Connection #0 to host fizzer left intact* Closing connection #0[{"id":1,"fname":"john","0":"smith"},{"id":2,"fname":"jane","lname":"doe"}]
![Page 45: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/45.jpg)
Testing
● Unit Tests● Replay access logs● Validate Responses● PhoneGen● AppMobi
![Page 46: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/46.jpg)
From HTML 5 to Native Apps
Apache Cordovahttp://incubator.apache.org/cordova/a platform for building native mobile applications using HTML, CSS and JavaScript
PhoneGap by Adobe
http://phonegap.com/an HTML5 app platform that allows you to author native applications with web technologies and get access to APIs and app stores
appMobihttp://www.appmobi.com/If you can write code using HTML5, CSS3 and JavaScript, you can use the XDK to build an application. There's no need to learn Objective C or download any other SDK's.
![Page 47: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/47.jpg)
PhoneGaphttp://phonegap.com/
![Page 48: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/48.jpg)
![Page 49: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/49.jpg)
Debugging
● Access Logs● Curl
● http://curl.haxx.se/
● Wireshark● http://www.wireshark.org/
● Tcpdump● http://www.tcpdump.org/
● Charles● http://www.charlesproxy.com/
● ext/http● http://pecl.php.net/package/pecl_http
![Page 50: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/50.jpg)
![Page 51: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/51.jpg)
![Page 52: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/52.jpg)
![Page 53: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/53.jpg)
![Page 54: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/54.jpg)
![Page 55: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/55.jpg)
![Page 56: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/56.jpg)
ext/http
● Pecl based extension● Provides simple interface to capture and
manipulate requests and responses● Version 1.7.4 is latest stable● Version 2.0.0 alpha is not backwards
compatible with 1.x versions
![Page 57: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/57.jpg)
Monitoring
● Continuous monitoring● Always know your API state before your consumers
● Understand usage patterns● Stay ahead of the trends and peak traffic times
● Pre-emptive communication● Be upfront when there are problems
![Page 58: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/58.jpg)
Redundancy
Something is eventually going to fail● Hardware● DB or Cache● Personnel (Admins or Remote Hands)● Network interruptions● Data Center failures
WHEN you fail, do so gracefully
![Page 59: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/59.jpg)
Don't Piss Off Developers
![Page 60: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/60.jpg)
Clear Terms of Service
![Page 61: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/61.jpg)
Document! Document! Document!Did I happen to mention to document your API?
![Page 62: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/62.jpg)
![Page 63: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/63.jpg)
Interactive Documentation
Documentation that not only explains how to use an API but also interactively allows one to make live test calls from it
![Page 64: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/64.jpg)
Interactive Documentation
Documentation that not only explains how to use an API but also interactively allows one to make live test calls from it
I/O Docshttps://github.com/mashery/iodocs
Swaggerhttp://swagger.wordnik.com/
![Page 65: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/65.jpg)
Interactive Documentation
DEMO
![Page 66: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/66.jpg)
I/O Docs: Klout
![Page 67: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/67.jpg)
![Page 68: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/68.jpg)
![Page 69: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/69.jpg)
I/O Doctorhttp://www.iodoctor.net/
![Page 70: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/70.jpg)
![Page 71: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/71.jpg)
![Page 72: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/72.jpg)
![Page 73: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/73.jpg)
Multi-Channel Support SystemShow the world that you care and that you're invested
![Page 74: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/74.jpg)
Multi-Channel Support SystemShow the world that you care and that you're invested
● Monitor EmailDon't allow this to queue up and insure they are notfalling into your spam buckets
![Page 75: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/75.jpg)
Multi-Channel Support SystemShow the world that you care and that you're invested
● Monitor EmailDon't allow this to queue up and insure they are notfalling into your spam buckets
● Setup and Monitor ForumsDon't rely on the community to take care of itself
![Page 76: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/76.jpg)
Multi-Channel Support SystemShow the world that you care and that you're invested
● Monitor EmailDon't allow this to queue up and insure they are notfalling into your spam buckets
● Setup and Monitor ForumsDon't rely on the community to take care of itself
● Monitor Social Medium ChannelsTwitterStack OverflowQuova<Insert favorite social medium channel here>
![Page 77: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/77.jpg)
Multi-Channel Support SystemShow the world that you care and that you're invested
● Monitor EmailDon't allow this to queue up and insure they are notfalling into your spam buckets
● Setup and Monitor ForumsDon't rely on the community to take care of itself
● Monitor Social Medium ChannelsTwitterStack OverflowQuova<Insert favorite social medium channel here>
● Respond Quickly!
![Page 78: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/78.jpg)
If you build it … syndrome
![Page 79: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/79.jpg)
Community
● Lead the community● Start Discussion● Provide Examples● Get Involved
● Show developers you care● And not just for your paying
customers
![Page 80: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/80.jpg)
Developer Outreach
![Page 81: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/81.jpg)
Outreach Must be Tailored to the Individual Needs of Mature, Growth and Seed Developers
Large scale conferencesUser conferencesTrade shows
Geo-local eventsLarge scale conferencesNetworking events
Web App EventsDeveloper Events
Mobile MondaysDeveloper events
Developer eventsNetworking events
Developer events (hacking)
Large scale conferencesMobile events
Large scale conferencesWeb Application events
Where They Are Where They’re Not
Web Developers
Corporate Developers
Mobile Developers
SMB Developers
LBS Developers
Gro
wth
Mat
ure
Geo-local eventsDeveloper events
DEVELOPER OUTREACH
Large scale conferences
Ope
n/S
eed
Dev
elop
ers
![Page 82: API Development - CDATA Zone](https://reader030.vdocuments.us/reader030/viewer/2022021021/620492374b1be21e4726ce3d/html5/thumbnails/82.jpg)
Questions?
We're Hiring!