SlideShare a Scribd company logo
1 of 43
API Development Becoming the Platform (CakePHP for Back-End Development or Cake for Web Services) By Andrew Curioso CakeFest 2010
Introduction Yesterday:  Designing CakePHP plug-ins for consuming APIs Today: Create your own API Basic setup Extras
Become a platform Be “a” platform A blog is a platform
Become a platform Internal only (closed) Multi-platform (consumers) Scalable External (open) Everything + Growth Mash-ups! Innovation Evangelists “The Platform Play”
Who’s already a platform Google Facebook Digg Twitter Yahoo BOSS / Flickr / Delicious / etc. Salesforce Ebay Amazon Gowalla FourSquare Bit.ly Paypal Authorize.net Etc…
Types of APIs Patterns Representation State Transfer (REST) Remote Procedure Calls (RPC) Protocols / Formats XML JSON YAML  AMF Etc...
RESTful Representational State Transfer Resource based (nouns) 5 verbs GET PUT POST DELETE HEAD Easy in CakePHP
Today’s App URL shortening website User authentication (simple) Create, read, update, and delete (CRUD)
Models id user_id url created modified users urls
Making it RESTful APP/config/routes.php Router::mapResource(‘users’) Source: http://book.cakephp.org/view/1239/The-Simple-Setup
Security Pitfall ,[object Object],Only POST and PUT should write data Only POST and DELETE should delete data
Mapping Extensions Router::parseExtensions() RequestHandler component Switches layouts / views Includes helpers Parses incoming XML on POST Router::connect(      "/:controller/:id”,     array ("action" => "edit", "[method]" => "PUT"), array("id" => "[0-9]+”) ); Source: http://book.cakephp.org/view/1240/Custom-REST-Routing
Json View Simple Fast Wide-spread <?php     echo json_encode( $url ); ?> APP/views/urls/json/view.ctp
JsonP P w/ padding Uses callback Cross domain <?php     if ( $callbackFunc !== false )         echo $callbackFunc.'(';     echo $content_for_layout;     if ( $callbackFunc )         echo $callbackFunc.')';    ?> function beforeFilter() {     if ( array_key_exists('callback’, $this->params[‘url’]) )         $this->set(‘callbackFunc’, $this->params[‘url’][‘callback’]);     else         $this->set(‘callbackFunc’, false); } APP/views/layouts/json/default.ctp APP/app_controller.php
XML View Strongly Typed Human readable Lots of existing tools <?   echo ‘<url>’;   echo $xml->serialize( $url );   echo ‘<url>’; ?> APP/views/urls/xml/view.ctp
Other Views Human Readable XML Json / JsonP HTML YAML CSV Serialized PHP Etc… Binary AMF Microsoft Excel PDF JPEG / PNG Etc…
Testing It Out Using cURL Create curl –d “url=www.example.com” http://tinyr.me/urls.json Read curl http://tinyr.me/urls/123.json Update curl –d “url=www.example.com/foo” http://tinyr.me/urls/123.json Delete curl –X DELETE http://tinyr.me/urls/123.json
Done? We have MVC files RESTful Views XML Json / JsonP We’re missing Error handling Pagination Authentication Authorization Documentation
Status Codes Success 200 OK * 201 Created * 303 See Other * Error 401 Unauthorized * 402 Payment Required 403 Forbidden * 404 Not Found * Error (continued) 405 Method Not Allowed * 409 Conflict 410 Gone 500 Internal Server Error 501 Not Implemented 503 Service Unavailable
Add Method If not a POST request 405 Method Not Allowed Already existed 303 See Other Save success 201 Created Failure  200 OK with explanation
Edit Method If not a POST or PUT request 405 Method Not Allowed Invalid ID 404 File Not Found Success 200 OK Failure 200 OK with explanation
Delete Method If not a POST or DELETE request 405 Method Not Allowed Invalid ID 404 File Not Found Success 200 OK Failure 200 OK with explanation
Global User is not allowed to access resource 403 Forbidden  User is not logged in 401 Unauthorized
Throwing Errors Same format Descriptive Human Computer Comprehensive
Implementation function your_action() {   …   $this->_userError(404);   … } APP/controllers/your_controller.php function _userError( $code, $options=array() ) {   $codes = array(     402 => 'Payment Required',     …   );   $this->header("HTTP/1.1 {$type} {$codes[$type]}");   $this->cakeError('error'.$type, array( array( 'options' => $options ) ) ); } APP/app_controller.php
Implementation {"Error": {   "code" : 404,   "description" : "File Not Found" }} APP/views/errors/error404.ctp
HTTP Headers Return meta-information Rate limiting Pagination Etc.
Pagination Uses HTTP headers App defined start with “X-” function paginate($object=NULL, $scope=array(), $whitelist=array() ) {     $data = parent::paginate($object,$scope,$whitelist);     // … messy code to get the object …     $this->header('X-Current-Page: '.((int)$this->params['paging'][$object->alias]['page']));     $this->header('X-Page-Limit: '.((int)$this->params['paging'][$object->alias]['options']['limit']));     $this->header('X-Page-Total: '.((int)$this->params['paging'][$object->alias]['count']));     return $data; } APP/app_controller.php
Multi-Platform Dev Use a UI that makes sense Bring something to the table
Platform Support Web Browsers Do not support: DELETE PUT Fortunately Cake… Let’s you do this: _method=DELETE
Platform Support DELETE /urls/123.json HTTP1.1 Host: www.example.com POST /urls/123.json HTTP1.1 Host: www.example.com _method=DELETE
Authentication
Authorization There is no magic One or more: user_id Administrator Moderator
Documentation Vocabularies / Schemas DTD or schema files Examples Code I/O Community Feedback
What about SOAP and AMF? CakePHP rocks with REST SOAP is heavy AMF is light but requires Flash But, if you still want to, you can
Flow for SOAP and AMF
Example Flow Router UrlsController AmfController User POST ::gateway() ::view() Return data Format envelope
Some final words…
Don’t Choose Views are easy
API Developers Checklist Documentation Example code Definition files (if applicable) Unit tests
Finding the code MIT License http://tinyr.me
Happy Aniversary Happy anniversary, Laura. 1 year: Sept. 5, 2010
Andrew Curioso Contact: www.AndrewCurioso.com/contact @AndrewCurioso on Twitter

More Related Content

What's hot

Introduction to PHP - Basics of PHP
Introduction to PHP - Basics of PHPIntroduction to PHP - Basics of PHP
Introduction to PHP - Basics of PHPwahidullah mudaser
 
Open Source Package PHP & MySQL
Open Source Package PHP & MySQLOpen Source Package PHP & MySQL
Open Source Package PHP & MySQLkalaisai
 
Secure PHP Coding - Part 1
Secure PHP Coding - Part 1Secure PHP Coding - Part 1
Secure PHP Coding - Part 1Vinoth Kumar
 
Secure PHP Coding - Part 2
Secure PHP Coding - Part 2Secure PHP Coding - Part 2
Secure PHP Coding - Part 2Vinoth Kumar
 
Make WordPress realtime.
Make WordPress realtime.Make WordPress realtime.
Make WordPress realtime.Josh Hillier
 
Introduction to PHP Lecture 1
Introduction to PHP Lecture 1Introduction to PHP Lecture 1
Introduction to PHP Lecture 1Ajay Khatri
 
PHP - Introduction to PHP - Mazenet Solution
PHP - Introduction to PHP - Mazenet SolutionPHP - Introduction to PHP - Mazenet Solution
PHP - Introduction to PHP - Mazenet SolutionMazenetsolution
 
Flask patterns
Flask patternsFlask patterns
Flask patternsit-people
 
PHP Workshop Notes
PHP Workshop NotesPHP Workshop Notes
PHP Workshop NotesPamela Fox
 
Playing nice with others
Playing nice with othersPlaying nice with others
Playing nice with othersEric Mann
 
Short Intro to PHP and MySQL
Short Intro to PHP and MySQLShort Intro to PHP and MySQL
Short Intro to PHP and MySQLJussi Pohjolainen
 
Php Calling Operators
Php Calling OperatorsPhp Calling Operators
Php Calling Operatorsmussawir20
 
Oracle APEX Performance
Oracle APEX PerformanceOracle APEX Performance
Oracle APEX PerformanceScott Wesley
 
Action View Form Helpers - 1, Season 2
Action View Form Helpers - 1, Season 2Action View Form Helpers - 1, Season 2
Action View Form Helpers - 1, Season 2RORLAB
 

What's hot (20)

Using PHP
Using PHPUsing PHP
Using PHP
 
Introduction to PHP - Basics of PHP
Introduction to PHP - Basics of PHPIntroduction to PHP - Basics of PHP
Introduction to PHP - Basics of PHP
 
Open Source Package PHP & MySQL
Open Source Package PHP & MySQLOpen Source Package PHP & MySQL
Open Source Package PHP & MySQL
 
Secure PHP Coding - Part 1
Secure PHP Coding - Part 1Secure PHP Coding - Part 1
Secure PHP Coding - Part 1
 
Secure PHP Coding - Part 2
Secure PHP Coding - Part 2Secure PHP Coding - Part 2
Secure PHP Coding - Part 2
 
Php mysql
Php mysqlPhp mysql
Php mysql
 
Introduction to PHP
Introduction to PHPIntroduction to PHP
Introduction to PHP
 
Make WordPress realtime.
Make WordPress realtime.Make WordPress realtime.
Make WordPress realtime.
 
Php Lecture Notes
Php Lecture NotesPhp Lecture Notes
Php Lecture Notes
 
PHP
PHP PHP
PHP
 
Introduction to PHP Lecture 1
Introduction to PHP Lecture 1Introduction to PHP Lecture 1
Introduction to PHP Lecture 1
 
PHP - Introduction to PHP - Mazenet Solution
PHP - Introduction to PHP - Mazenet SolutionPHP - Introduction to PHP - Mazenet Solution
PHP - Introduction to PHP - Mazenet Solution
 
Flask patterns
Flask patternsFlask patterns
Flask patterns
 
PHP Workshop Notes
PHP Workshop NotesPHP Workshop Notes
PHP Workshop Notes
 
Playing nice with others
Playing nice with othersPlaying nice with others
Playing nice with others
 
Short Intro to PHP and MySQL
Short Intro to PHP and MySQLShort Intro to PHP and MySQL
Short Intro to PHP and MySQL
 
PHP Basics
PHP BasicsPHP Basics
PHP Basics
 
Php Calling Operators
Php Calling OperatorsPhp Calling Operators
Php Calling Operators
 
Oracle APEX Performance
Oracle APEX PerformanceOracle APEX Performance
Oracle APEX Performance
 
Action View Form Helpers - 1, Season 2
Action View Form Helpers - 1, Season 2Action View Form Helpers - 1, Season 2
Action View Form Helpers - 1, Season 2
 

Similar to Cakefest 2010: API Development

PHP and Rich Internet Applications
PHP and Rich Internet ApplicationsPHP and Rich Internet Applications
PHP and Rich Internet Applicationselliando dias
 
State Machines to State of the Art
State Machines to State of the ArtState Machines to State of the Art
State Machines to State of the ArtRowan Merewood
 
Creating REST Applications with the Slim Micro-Framework by Vikram Vaswani
Creating REST Applications with the Slim Micro-Framework by Vikram VaswaniCreating REST Applications with the Slim Micro-Framework by Vikram Vaswani
Creating REST Applications with the Slim Micro-Framework by Vikram Vaswanivvaswani
 
PHP and Rich Internet Applications
PHP and Rich Internet ApplicationsPHP and Rich Internet Applications
PHP and Rich Internet Applicationselliando dias
 
Introduction to CodeIgniter (RefreshAugusta, 20 May 2009)
Introduction to CodeIgniter (RefreshAugusta, 20 May 2009)Introduction to CodeIgniter (RefreshAugusta, 20 May 2009)
Introduction to CodeIgniter (RefreshAugusta, 20 May 2009)Michael Wales
 
The Django Web Application Framework
The Django Web Application FrameworkThe Django Web Application Framework
The Django Web Application FrameworkSimon Willison
 
Php Security3895
Php Security3895Php Security3895
Php Security3895Aung Khant
 
Bootstrat REST APIs with Laravel 5
Bootstrat REST APIs with Laravel 5Bootstrat REST APIs with Laravel 5
Bootstrat REST APIs with Laravel 5Elena Kolevska
 
Using Geeklog as a Web Application Framework
Using Geeklog as a Web Application FrameworkUsing Geeklog as a Web Application Framework
Using Geeklog as a Web Application FrameworkDirk Haun
 
Implementing Comet using PHP
Implementing Comet using PHPImplementing Comet using PHP
Implementing Comet using PHPKing Foo
 
Ellerslie User Group - ReST Presentation
Ellerslie User Group - ReST PresentationEllerslie User Group - ReST Presentation
Ellerslie User Group - ReST PresentationAlex Henderson
 

Similar to Cakefest 2010: API Development (20)

PHP and Rich Internet Applications
PHP and Rich Internet ApplicationsPHP and Rich Internet Applications
PHP and Rich Internet Applications
 
Web Scraping with PHP
Web Scraping with PHPWeb Scraping with PHP
Web Scraping with PHP
 
State Machines to State of the Art
State Machines to State of the ArtState Machines to State of the Art
State Machines to State of the Art
 
Creating REST Applications with the Slim Micro-Framework by Vikram Vaswani
Creating REST Applications with the Slim Micro-Framework by Vikram VaswaniCreating REST Applications with the Slim Micro-Framework by Vikram Vaswani
Creating REST Applications with the Slim Micro-Framework by Vikram Vaswani
 
Introduction to PHP
Introduction to PHPIntroduction to PHP
Introduction to PHP
 
Framework
FrameworkFramework
Framework
 
PHP and Rich Internet Applications
PHP and Rich Internet ApplicationsPHP and Rich Internet Applications
PHP and Rich Internet Applications
 
Introduction to CodeIgniter (RefreshAugusta, 20 May 2009)
Introduction to CodeIgniter (RefreshAugusta, 20 May 2009)Introduction to CodeIgniter (RefreshAugusta, 20 May 2009)
Introduction to CodeIgniter (RefreshAugusta, 20 May 2009)
 
Php frameworks
Php frameworksPhp frameworks
Php frameworks
 
The Django Web Application Framework
The Django Web Application FrameworkThe Django Web Application Framework
The Django Web Application Framework
 
Web Scraping with PHP
Web Scraping with PHPWeb Scraping with PHP
Web Scraping with PHP
 
Php security3895
Php security3895Php security3895
Php security3895
 
PHP Security
PHP SecurityPHP Security
PHP Security
 
B03-GenomeContent-Intermine
B03-GenomeContent-IntermineB03-GenomeContent-Intermine
B03-GenomeContent-Intermine
 
Php Security3895
Php Security3895Php Security3895
Php Security3895
 
Bootstrat REST APIs with Laravel 5
Bootstrat REST APIs with Laravel 5Bootstrat REST APIs with Laravel 5
Bootstrat REST APIs with Laravel 5
 
Using Geeklog as a Web Application Framework
Using Geeklog as a Web Application FrameworkUsing Geeklog as a Web Application Framework
Using Geeklog as a Web Application Framework
 
Implementing Comet using PHP
Implementing Comet using PHPImplementing Comet using PHP
Implementing Comet using PHP
 
Ellerslie User Group - ReST Presentation
Ellerslie User Group - ReST PresentationEllerslie User Group - ReST Presentation
Ellerslie User Group - ReST Presentation
 
Web Scraping with PHP
Web Scraping with PHPWeb Scraping with PHP
Web Scraping with PHP
 

Recently uploaded

College Call Girls New Alipore - For 7001035870 Cheap & Best with original Ph...
College Call Girls New Alipore - For 7001035870 Cheap & Best with original Ph...College Call Girls New Alipore - For 7001035870 Cheap & Best with original Ph...
College Call Girls New Alipore - For 7001035870 Cheap & Best with original Ph...anamikaraghav4
 
Hot Call Girls In Goa 7028418221 Call Girls In Vagator Beach EsCoRtS
Hot Call Girls In Goa 7028418221 Call Girls In Vagator Beach EsCoRtSHot Call Girls In Goa 7028418221 Call Girls In Vagator Beach EsCoRtS
Hot Call Girls In Goa 7028418221 Call Girls In Vagator Beach EsCoRtSApsara Of India
 
Independent Joka Escorts ✔ 8250192130 ✔ Full Night With Room Online Booking 2...
Independent Joka Escorts ✔ 8250192130 ✔ Full Night With Room Online Booking 2...Independent Joka Escorts ✔ 8250192130 ✔ Full Night With Room Online Booking 2...
Independent Joka Escorts ✔ 8250192130 ✔ Full Night With Room Online Booking 2...noor ahmed
 
VIP Call Girls Service Banjara Hills Hyderabad Call +91-8250192130
VIP Call Girls Service Banjara Hills Hyderabad Call +91-8250192130VIP Call Girls Service Banjara Hills Hyderabad Call +91-8250192130
VIP Call Girls Service Banjara Hills Hyderabad Call +91-8250192130Suhani Kapoor
 
VIP Call Girls Pune Sanjana 8617697112 Independent Escort Service Pune
VIP Call Girls Pune Sanjana 8617697112 Independent Escort Service PuneVIP Call Girls Pune Sanjana 8617697112 Independent Escort Service Pune
VIP Call Girls Pune Sanjana 8617697112 Independent Escort Service PuneCall girls in Ahmedabad High profile
 
↑Top Model (Kolkata) Call Girls Sonagachi ⟟ 8250192130 ⟟ High Class Call Girl...
↑Top Model (Kolkata) Call Girls Sonagachi ⟟ 8250192130 ⟟ High Class Call Girl...↑Top Model (Kolkata) Call Girls Sonagachi ⟟ 8250192130 ⟟ High Class Call Girl...
↑Top Model (Kolkata) Call Girls Sonagachi ⟟ 8250192130 ⟟ High Class Call Girl...noor ahmed
 
Contact:- 8860008073 Call Girls in Karnal Escort Service Available at Afforda...
Contact:- 8860008073 Call Girls in Karnal Escort Service Available at Afforda...Contact:- 8860008073 Call Girls in Karnal Escort Service Available at Afforda...
Contact:- 8860008073 Call Girls in Karnal Escort Service Available at Afforda...Apsara Of India
 
VIP Call Girls Nagpur Megha Call 7001035870 Meet With Nagpur Escorts
VIP Call Girls Nagpur Megha Call 7001035870 Meet With Nagpur EscortsVIP Call Girls Nagpur Megha Call 7001035870 Meet With Nagpur Escorts
VIP Call Girls Nagpur Megha Call 7001035870 Meet With Nagpur Escortsranjana rawat
 
(Dipika) Call Girls in Bangur ! 8250192130 ₹2999 Only and Free Hotel Delivery...
(Dipika) Call Girls in Bangur ! 8250192130 ₹2999 Only and Free Hotel Delivery...(Dipika) Call Girls in Bangur ! 8250192130 ₹2999 Only and Free Hotel Delivery...
(Dipika) Call Girls in Bangur ! 8250192130 ₹2999 Only and Free Hotel Delivery...Riya Pathan
 
VIP Call Girls Sonagachi - 8250192130 Escorts Service 50% Off with Cash ON De...
VIP Call Girls Sonagachi - 8250192130 Escorts Service 50% Off with Cash ON De...VIP Call Girls Sonagachi - 8250192130 Escorts Service 50% Off with Cash ON De...
VIP Call Girls Sonagachi - 8250192130 Escorts Service 50% Off with Cash ON De...anamikaraghav4
 
Call Girls Nashik Gayatri 7001305949 Independent Escort Service Nashik
Call Girls Nashik Gayatri 7001305949 Independent Escort Service NashikCall Girls Nashik Gayatri 7001305949 Independent Escort Service Nashik
Call Girls Nashik Gayatri 7001305949 Independent Escort Service NashikCall Girls in Nagpur High Profile
 
1681275559_haunting-adeline and hunting.pdf
1681275559_haunting-adeline and hunting.pdf1681275559_haunting-adeline and hunting.pdf
1681275559_haunting-adeline and hunting.pdfTanjirokamado769606
 
Kolkata Call Girl Howrah 👉 8250192130 ❣️💯 Available With Room 24×7
Kolkata Call Girl Howrah 👉 8250192130 ❣️💯 Available With Room 24×7Kolkata Call Girl Howrah 👉 8250192130 ❣️💯 Available With Room 24×7
Kolkata Call Girl Howrah 👉 8250192130 ❣️💯 Available With Room 24×7Riya Pathan
 
Kolkata Call Girl Airport Kolkata 👉 8250192130 ❣️💯 Available With Room 24×7
Kolkata Call Girl Airport Kolkata 👉 8250192130 ❣️💯 Available With Room 24×7Kolkata Call Girl Airport Kolkata 👉 8250192130 ❣️💯 Available With Room 24×7
Kolkata Call Girl Airport Kolkata 👉 8250192130 ❣️💯 Available With Room 24×7Riya Pathan
 
(DIVYA) Dhanori Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune Esc...
(DIVYA) Dhanori Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune Esc...(DIVYA) Dhanori Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune Esc...
(DIVYA) Dhanori Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune Esc...ranjana rawat
 
(KRITI) Pimpri Chinchwad Call Girls Just Call 7001035870 [ Cash on Delivery ]...
(KRITI) Pimpri Chinchwad Call Girls Just Call 7001035870 [ Cash on Delivery ]...(KRITI) Pimpri Chinchwad Call Girls Just Call 7001035870 [ Cash on Delivery ]...
(KRITI) Pimpri Chinchwad Call Girls Just Call 7001035870 [ Cash on Delivery ]...ranjana rawat
 
College Call Girl in Rajiv Chowk Delhi 9634446618 Short 1500 Night 6000 Best ...
College Call Girl in Rajiv Chowk Delhi 9634446618 Short 1500 Night 6000 Best ...College Call Girl in Rajiv Chowk Delhi 9634446618 Short 1500 Night 6000 Best ...
College Call Girl in Rajiv Chowk Delhi 9634446618 Short 1500 Night 6000 Best ...perfect solution
 
Call Girls In Goa 9316020077 Goa Call Girl By Indian Call Girls Goa
Call Girls In Goa  9316020077 Goa  Call Girl By Indian Call Girls GoaCall Girls In Goa  9316020077 Goa  Call Girl By Indian Call Girls Goa
Call Girls In Goa 9316020077 Goa Call Girl By Indian Call Girls Goasexy call girls service in goa
 
Beyond Bar & Club Udaipur CaLL GiRLS 09602870969
Beyond Bar & Club Udaipur CaLL GiRLS 09602870969Beyond Bar & Club Udaipur CaLL GiRLS 09602870969
Beyond Bar & Club Udaipur CaLL GiRLS 09602870969Apsara Of India
 
↑Top Model (Kolkata) Call Girls Howrah ⟟ 8250192130 ⟟ High Class Call Girl In...
↑Top Model (Kolkata) Call Girls Howrah ⟟ 8250192130 ⟟ High Class Call Girl In...↑Top Model (Kolkata) Call Girls Howrah ⟟ 8250192130 ⟟ High Class Call Girl In...
↑Top Model (Kolkata) Call Girls Howrah ⟟ 8250192130 ⟟ High Class Call Girl In...noor ahmed
 

Recently uploaded (20)

College Call Girls New Alipore - For 7001035870 Cheap & Best with original Ph...
College Call Girls New Alipore - For 7001035870 Cheap & Best with original Ph...College Call Girls New Alipore - For 7001035870 Cheap & Best with original Ph...
College Call Girls New Alipore - For 7001035870 Cheap & Best with original Ph...
 
Hot Call Girls In Goa 7028418221 Call Girls In Vagator Beach EsCoRtS
Hot Call Girls In Goa 7028418221 Call Girls In Vagator Beach EsCoRtSHot Call Girls In Goa 7028418221 Call Girls In Vagator Beach EsCoRtS
Hot Call Girls In Goa 7028418221 Call Girls In Vagator Beach EsCoRtS
 
Independent Joka Escorts ✔ 8250192130 ✔ Full Night With Room Online Booking 2...
Independent Joka Escorts ✔ 8250192130 ✔ Full Night With Room Online Booking 2...Independent Joka Escorts ✔ 8250192130 ✔ Full Night With Room Online Booking 2...
Independent Joka Escorts ✔ 8250192130 ✔ Full Night With Room Online Booking 2...
 
VIP Call Girls Service Banjara Hills Hyderabad Call +91-8250192130
VIP Call Girls Service Banjara Hills Hyderabad Call +91-8250192130VIP Call Girls Service Banjara Hills Hyderabad Call +91-8250192130
VIP Call Girls Service Banjara Hills Hyderabad Call +91-8250192130
 
VIP Call Girls Pune Sanjana 8617697112 Independent Escort Service Pune
VIP Call Girls Pune Sanjana 8617697112 Independent Escort Service PuneVIP Call Girls Pune Sanjana 8617697112 Independent Escort Service Pune
VIP Call Girls Pune Sanjana 8617697112 Independent Escort Service Pune
 
↑Top Model (Kolkata) Call Girls Sonagachi ⟟ 8250192130 ⟟ High Class Call Girl...
↑Top Model (Kolkata) Call Girls Sonagachi ⟟ 8250192130 ⟟ High Class Call Girl...↑Top Model (Kolkata) Call Girls Sonagachi ⟟ 8250192130 ⟟ High Class Call Girl...
↑Top Model (Kolkata) Call Girls Sonagachi ⟟ 8250192130 ⟟ High Class Call Girl...
 
Contact:- 8860008073 Call Girls in Karnal Escort Service Available at Afforda...
Contact:- 8860008073 Call Girls in Karnal Escort Service Available at Afforda...Contact:- 8860008073 Call Girls in Karnal Escort Service Available at Afforda...
Contact:- 8860008073 Call Girls in Karnal Escort Service Available at Afforda...
 
VIP Call Girls Nagpur Megha Call 7001035870 Meet With Nagpur Escorts
VIP Call Girls Nagpur Megha Call 7001035870 Meet With Nagpur EscortsVIP Call Girls Nagpur Megha Call 7001035870 Meet With Nagpur Escorts
VIP Call Girls Nagpur Megha Call 7001035870 Meet With Nagpur Escorts
 
(Dipika) Call Girls in Bangur ! 8250192130 ₹2999 Only and Free Hotel Delivery...
(Dipika) Call Girls in Bangur ! 8250192130 ₹2999 Only and Free Hotel Delivery...(Dipika) Call Girls in Bangur ! 8250192130 ₹2999 Only and Free Hotel Delivery...
(Dipika) Call Girls in Bangur ! 8250192130 ₹2999 Only and Free Hotel Delivery...
 
VIP Call Girls Sonagachi - 8250192130 Escorts Service 50% Off with Cash ON De...
VIP Call Girls Sonagachi - 8250192130 Escorts Service 50% Off with Cash ON De...VIP Call Girls Sonagachi - 8250192130 Escorts Service 50% Off with Cash ON De...
VIP Call Girls Sonagachi - 8250192130 Escorts Service 50% Off with Cash ON De...
 
Call Girls Nashik Gayatri 7001305949 Independent Escort Service Nashik
Call Girls Nashik Gayatri 7001305949 Independent Escort Service NashikCall Girls Nashik Gayatri 7001305949 Independent Escort Service Nashik
Call Girls Nashik Gayatri 7001305949 Independent Escort Service Nashik
 
1681275559_haunting-adeline and hunting.pdf
1681275559_haunting-adeline and hunting.pdf1681275559_haunting-adeline and hunting.pdf
1681275559_haunting-adeline and hunting.pdf
 
Kolkata Call Girl Howrah 👉 8250192130 ❣️💯 Available With Room 24×7
Kolkata Call Girl Howrah 👉 8250192130 ❣️💯 Available With Room 24×7Kolkata Call Girl Howrah 👉 8250192130 ❣️💯 Available With Room 24×7
Kolkata Call Girl Howrah 👉 8250192130 ❣️💯 Available With Room 24×7
 
Kolkata Call Girl Airport Kolkata 👉 8250192130 ❣️💯 Available With Room 24×7
Kolkata Call Girl Airport Kolkata 👉 8250192130 ❣️💯 Available With Room 24×7Kolkata Call Girl Airport Kolkata 👉 8250192130 ❣️💯 Available With Room 24×7
Kolkata Call Girl Airport Kolkata 👉 8250192130 ❣️💯 Available With Room 24×7
 
(DIVYA) Dhanori Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune Esc...
(DIVYA) Dhanori Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune Esc...(DIVYA) Dhanori Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune Esc...
(DIVYA) Dhanori Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune Esc...
 
(KRITI) Pimpri Chinchwad Call Girls Just Call 7001035870 [ Cash on Delivery ]...
(KRITI) Pimpri Chinchwad Call Girls Just Call 7001035870 [ Cash on Delivery ]...(KRITI) Pimpri Chinchwad Call Girls Just Call 7001035870 [ Cash on Delivery ]...
(KRITI) Pimpri Chinchwad Call Girls Just Call 7001035870 [ Cash on Delivery ]...
 
College Call Girl in Rajiv Chowk Delhi 9634446618 Short 1500 Night 6000 Best ...
College Call Girl in Rajiv Chowk Delhi 9634446618 Short 1500 Night 6000 Best ...College Call Girl in Rajiv Chowk Delhi 9634446618 Short 1500 Night 6000 Best ...
College Call Girl in Rajiv Chowk Delhi 9634446618 Short 1500 Night 6000 Best ...
 
Call Girls In Goa 9316020077 Goa Call Girl By Indian Call Girls Goa
Call Girls In Goa  9316020077 Goa  Call Girl By Indian Call Girls GoaCall Girls In Goa  9316020077 Goa  Call Girl By Indian Call Girls Goa
Call Girls In Goa 9316020077 Goa Call Girl By Indian Call Girls Goa
 
Beyond Bar & Club Udaipur CaLL GiRLS 09602870969
Beyond Bar & Club Udaipur CaLL GiRLS 09602870969Beyond Bar & Club Udaipur CaLL GiRLS 09602870969
Beyond Bar & Club Udaipur CaLL GiRLS 09602870969
 
↑Top Model (Kolkata) Call Girls Howrah ⟟ 8250192130 ⟟ High Class Call Girl In...
↑Top Model (Kolkata) Call Girls Howrah ⟟ 8250192130 ⟟ High Class Call Girl In...↑Top Model (Kolkata) Call Girls Howrah ⟟ 8250192130 ⟟ High Class Call Girl In...
↑Top Model (Kolkata) Call Girls Howrah ⟟ 8250192130 ⟟ High Class Call Girl In...
 

Cakefest 2010: API Development

  • 1. API Development Becoming the Platform (CakePHP for Back-End Development or Cake for Web Services) By Andrew Curioso CakeFest 2010
  • 2. Introduction Yesterday: Designing CakePHP plug-ins for consuming APIs Today: Create your own API Basic setup Extras
  • 3. Become a platform Be “a” platform A blog is a platform
  • 4. Become a platform Internal only (closed) Multi-platform (consumers) Scalable External (open) Everything + Growth Mash-ups! Innovation Evangelists “The Platform Play”
  • 5. Who’s already a platform Google Facebook Digg Twitter Yahoo BOSS / Flickr / Delicious / etc. Salesforce Ebay Amazon Gowalla FourSquare Bit.ly Paypal Authorize.net Etc…
  • 6. Types of APIs Patterns Representation State Transfer (REST) Remote Procedure Calls (RPC) Protocols / Formats XML JSON YAML AMF Etc...
  • 7. RESTful Representational State Transfer Resource based (nouns) 5 verbs GET PUT POST DELETE HEAD Easy in CakePHP
  • 8. Today’s App URL shortening website User authentication (simple) Create, read, update, and delete (CRUD)
  • 9. Models id user_id url created modified users urls
  • 10. Making it RESTful APP/config/routes.php Router::mapResource(‘users’) Source: http://book.cakephp.org/view/1239/The-Simple-Setup
  • 11.
  • 12. Mapping Extensions Router::parseExtensions() RequestHandler component Switches layouts / views Includes helpers Parses incoming XML on POST Router::connect( "/:controller/:id”, array ("action" => "edit", "[method]" => "PUT"), array("id" => "[0-9]+”) ); Source: http://book.cakephp.org/view/1240/Custom-REST-Routing
  • 13. Json View Simple Fast Wide-spread <?php echo json_encode( $url ); ?> APP/views/urls/json/view.ctp
  • 14. JsonP P w/ padding Uses callback Cross domain <?php if ( $callbackFunc !== false ) echo $callbackFunc.'('; echo $content_for_layout; if ( $callbackFunc ) echo $callbackFunc.')'; ?> function beforeFilter() { if ( array_key_exists('callback’, $this->params[‘url’]) ) $this->set(‘callbackFunc’, $this->params[‘url’][‘callback’]); else $this->set(‘callbackFunc’, false); } APP/views/layouts/json/default.ctp APP/app_controller.php
  • 15. XML View Strongly Typed Human readable Lots of existing tools <? echo ‘<url>’; echo $xml->serialize( $url ); echo ‘<url>’; ?> APP/views/urls/xml/view.ctp
  • 16. Other Views Human Readable XML Json / JsonP HTML YAML CSV Serialized PHP Etc… Binary AMF Microsoft Excel PDF JPEG / PNG Etc…
  • 17. Testing It Out Using cURL Create curl –d “url=www.example.com” http://tinyr.me/urls.json Read curl http://tinyr.me/urls/123.json Update curl –d “url=www.example.com/foo” http://tinyr.me/urls/123.json Delete curl –X DELETE http://tinyr.me/urls/123.json
  • 18. Done? We have MVC files RESTful Views XML Json / JsonP We’re missing Error handling Pagination Authentication Authorization Documentation
  • 19. Status Codes Success 200 OK * 201 Created * 303 See Other * Error 401 Unauthorized * 402 Payment Required 403 Forbidden * 404 Not Found * Error (continued) 405 Method Not Allowed * 409 Conflict 410 Gone 500 Internal Server Error 501 Not Implemented 503 Service Unavailable
  • 20. Add Method If not a POST request 405 Method Not Allowed Already existed 303 See Other Save success 201 Created Failure 200 OK with explanation
  • 21. Edit Method If not a POST or PUT request 405 Method Not Allowed Invalid ID 404 File Not Found Success 200 OK Failure 200 OK with explanation
  • 22. Delete Method If not a POST or DELETE request 405 Method Not Allowed Invalid ID 404 File Not Found Success 200 OK Failure 200 OK with explanation
  • 23. Global User is not allowed to access resource 403 Forbidden User is not logged in 401 Unauthorized
  • 24. Throwing Errors Same format Descriptive Human Computer Comprehensive
  • 25. Implementation function your_action() { … $this->_userError(404); … } APP/controllers/your_controller.php function _userError( $code, $options=array() ) { $codes = array( 402 => 'Payment Required', … ); $this->header("HTTP/1.1 {$type} {$codes[$type]}"); $this->cakeError('error'.$type, array( array( 'options' => $options ) ) ); } APP/app_controller.php
  • 26. Implementation {"Error": { "code" : 404, "description" : "File Not Found" }} APP/views/errors/error404.ctp
  • 27. HTTP Headers Return meta-information Rate limiting Pagination Etc.
  • 28. Pagination Uses HTTP headers App defined start with “X-” function paginate($object=NULL, $scope=array(), $whitelist=array() ) { $data = parent::paginate($object,$scope,$whitelist); // … messy code to get the object … $this->header('X-Current-Page: '.((int)$this->params['paging'][$object->alias]['page'])); $this->header('X-Page-Limit: '.((int)$this->params['paging'][$object->alias]['options']['limit'])); $this->header('X-Page-Total: '.((int)$this->params['paging'][$object->alias]['count'])); return $data; } APP/app_controller.php
  • 29. Multi-Platform Dev Use a UI that makes sense Bring something to the table
  • 30. Platform Support Web Browsers Do not support: DELETE PUT Fortunately Cake… Let’s you do this: _method=DELETE
  • 31. Platform Support DELETE /urls/123.json HTTP1.1 Host: www.example.com POST /urls/123.json HTTP1.1 Host: www.example.com _method=DELETE
  • 33. Authorization There is no magic One or more: user_id Administrator Moderator
  • 34. Documentation Vocabularies / Schemas DTD or schema files Examples Code I/O Community Feedback
  • 35. What about SOAP and AMF? CakePHP rocks with REST SOAP is heavy AMF is light but requires Flash But, if you still want to, you can
  • 36. Flow for SOAP and AMF
  • 37. Example Flow Router UrlsController AmfController User POST ::gateway() ::view() Return data Format envelope
  • 40. API Developers Checklist Documentation Example code Definition files (if applicable) Unit tests
  • 41. Finding the code MIT License http://tinyr.me
  • 42. Happy Aniversary Happy anniversary, Laura. 1 year: Sept. 5, 2010
  • 43. Andrew Curioso Contact: www.AndrewCurioso.com/contact @AndrewCurioso on Twitter

Editor's Notes

  1. Who am I.Introduce myVBO.About this presentation.What I’ll talk about.
  2. Neil – plugins to consumeNot much code.Overview.All the slides will be online right after lunch.
  3. Raise your hand up if you use CakePHP to handle some kind of data.Now put your hand down if you don’t have an API.If you have info why not be a platform?It doesn’t matter if the platform is very simple. A blog is a platform. It has an API for posting new articles and it has an RSS feed for syndicating them.Now that I simplified it.That’s my take.
  4. Even if you are developing a closed API…I hope everyone considers open APIs.All this roles up into one concept. “The platform play.” So if you need something to go back to your boss or your investors with… that’s the thing. You’re making a platform play.
  5. If this was five years ago...But the strategy works pretty well. TwitterFacebookBit.lyAmazonandSalesforceNow it is almost a necessity to have an API of some sort.
  6. There are multiple patterns for APIs. There are a couple more lesser used ones but the two big ones are REST and RPC.Within those patterns you can use one or more formats to transfer your data.
  7. Rest stands for Representational State Transfer incase you missed it in Neal’s presentation. As mentioned yesterday, the largest example of REST in the wild is HTTP.Luckily for us, CakePHP is usually layered on-top of HTTP so it inherits all the RESTful mechanisms.REST has a concept called resources (a specific user or comment are two examples).They are also called nouns which are acted on by verbs.There are five verbs in HTTP. We will focus on three.Finally, one last important thing… CakePHP makes REST easy.
  8. The app that I will be using as an example today is the simplest app that I could think of.It is a URL shortening services that allows you to authenticate and thus be able to delete and edit URLs that you yourself shortened, and also basic CRUD.
  9. There are two models. The user model, which is pretty standard for a CakePHP project, and the urls model which I have on the screen.A full URL shortened can, of course, get much more complicated than that. But for today I’m keeping it basic.
  10. Once you’ve baked your model and what not you can open up your router and map the resource. This will register all the routes you need for REST in one call.You can still do it manually if you want but you don’t have to.These are the six routes registered when you map a resource.
  11. One rule to live by is to never write or delete data on anything that is not a POST, PUT, or DELETE request.The main purpose of this rule is to protect against Cross Site Request Forgeries or CSRF attacks which are every difficult to defend against otherwise.Say that the add method accepted GET requests. Someone could then simply embed an image on a page with the add URL as a source and execute a add() as any user who visits the site.
  12. Before we begin developing views we’ll haveto tell PHP to recognize file extensions and switch the views and layouts accordingly.We do this by turning on parseExtensions in the routes.php file and including the RequestHandler component in the app_controller.The RequestHandler component is what actually switches the views. It also includes helpers automatically in the view if a helper has the same name as the extension (like XML) and parses incoming POSTed XML and assigns it to the data property of the controller.
  13. We now need to create a couple views.The Json view is the first and the one that I like the most. Because it is simple and easy to understand.It is fast thanks to native PHP support, and also very wide-spread.What you see here is the entire view for the view action in the urls controller.Notice the path to the view. The RequestHandler will tell Cake to look in the json folder for the appropriate view.
  14. We can also easily support JsonP or Json with padding.JsonP specifies a Javascript callback function to execute with the results of a request.It allows for cross domain requests because you can trigger it via a simple script-include and function calls works across domains so the callback will work just fine.One important note is that it is only for GET requests. So, as I said earlier, it shouldn’t be able to write or delete data.JsonP can be handle generically in the layout. Notice the layout path.A JsonP request always takes the callback via a query parameter. So your app controller can read in the callback then set it for use in the view. The layout then reads it sand wraps the output in it is necessary.
  15. Now for the XML view. And I can hear the boos now.XML does have some benefits. It is strongly typed, human readable, and has lots of existing tools available.Like Json, the view is pretty self-explanatory. Note the xml sub-directory in the view path.
  16. One of the best parts about using parseExtensions and RequestHandler is you can literally have as many views as you want into the data.I listed just some of them here.
  17. Erik’s talk.
  18. If you did the ACL stuff Erik was talking about…Little difficult. Default behavior is redirectController, model, and object
  19. Maintenance mode