Upload
pierre-martin
View
1.178
Download
0
Tags:
Embed Size (px)
DESCRIPTION
Slides from the talk given by Charlie van de Kerkhof during the CakeFest #3 - July 2009 Note: the original pdf and the code related to this talk can be found on cakephp.org
Citation preview
Building a custom APIby Charlie van de Kerkhof (primeminister)
Courier New Bold18 pt
Charlie-preso
CakeFest #3 July 2009
Goals
• RESTful with the correct HTTP code
• API like twitter to open up to the public in the near future
• Smooth integration with code for the website
• Return values HTML, XML and JSON
• Not necessarily the correct methods (POST,GET,DELETE,PUT)
What is it?
• Link sharing (like del.icio.us) with groups and users
• Comments on links
• Trusted group of friends
• Links are not necessarily bookmarks!
Setup
• Database
• Routes
• Model
• Controller
• Views (HTML, XML & JSON)
• Tests
Database
Models
• Baked the associations
• Basic validation in model
• AppModel: Using containable
• AppModel: Overwrite del() method for using ‘status’ field in tables.
AppController• Setting up helpers and components
• Mapping request methods to actions
• Defining up HTTP response codes
• Populate POST request to $this->dataBecause this APP is also meant to get data from HTML forms
• Controller => links, action => viewparams[‘pass’][0] = ’primeminister’
• Check nickname variable
• Find the links from this user
• Set the results and options
GET Request/links/view/primeminister.xml
APP/controllers/links_controller.php
Error occursf.i. nickname is not same as loggedin user
• Calls AppController::setError()
• setError() checks which request is made (XML, JSON, HTML)
• When HTML is requested it calls the Session::setFlash method
• Other requests it sets the viewVars and renders the error template errcode & code:
errcode: to define f.e. 1007 what is missing.For developers handy to program
Code: HTTP response code
APP/controllers/links_controller.php
APP/app_controller.php
continue... APP/app_controller.php
continue... APP/app_controller.php
Views
• Created generic template files
• XML: Xml::serialize with format=>tags
• JSON with $javascript->object($record);
• When necessary create template file in views/{controller} folder to override generic template
• Put this check in AppController::beforeRender
APP/views/generic/xml/view.ctp
APP/views/generic/json/view.ctp
APP/views/links/xml/view.ctp
Links view (XML)/links/view/primeminister.xml?limit=2&page=3
Error view (XML)
Routes
Controller tests
• Test made on controller actions
• Checks for view variables
• errocode & code check
• Don’t forget to check on errors!
tests/cases/controllers/links_controllers.test.php
Summarize
• Loosely map request method (POST/GET/...) to action
• For using in website and as API (!)
• Return response codes and Mento errors
• Easier for developer to check what error
• Rendering views based on generic template
• Tests on controller and viewVars (code)
Question (& Answers?)
Thanks!
Web: http://www.cake-toppings.comIRC: primeministerTwitter: http://twitter.com/charli3