Your SlideShare is downloading. ×
0
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Res tful api design & implementation with code igniter php framework_appleboy
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Res tful api design & implementation with code igniter php framework_appleboy

3,570

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,570
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
34
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. RESTful API Design & Implementation with CodeIgniter PHP Framework 2012 PHP Conference
  • 2. Who Am I Bo-Yi Wu @appleboy http://blog.wu-boy.com 任職於瑞昱半導體 RealTek(IC Design House) - TV 多媒體部門 - Sencha Touch 2, Backbone.js, CodeIgniter, Node.js, MongoDB, MySQL, Twitter Bootstrap, Twitter Hogan ... 2012 PHPConf 2
  • 3. Who Am I● Open Source Contributions (github: appleboy) – CodeIgniter-Native-Session – CodeIgniter-i18n – CodeIgniter-Template – CodeIgniter-Nexmo-Message – CodeIgniter-TextMagic-API 2012 PHPConf 3
  • 4. My Focus● CodeIgbiter 3.0.x develop branch – Support Native Session – Support HMVC – Support Sparks Package Management System● Laravel develop branch● Javascript (Node.js, Socket.io, Express, Backbone.js) 2012 PHPConf 4
  • 5. Outline● Restful API Basic● API Design● Implementing API with CodeIgniter● Verify your API 2012 PHPConf 5
  • 6. Restful API Basic 2012 PHPConf 6
  • 7. Why Use Restful? Restful API Service Database 2012 PHPConf (MySQL,MongoDB) 7
  • 8. What is REST? Http Method● POST● GET● PUT● DELETE● OPTIONS Define in RFC 2616 2012 PHPConf 8
  • 9. 並非所有的瀏覽器都支援 PUT, DELETE http://api.jquery.com/jQuery.ajax/ 2012 PHPConf 9
  • 10. 如何解決未支援的瀏覽器 2012 PHPConf 10
  • 11. <input type=hidden name=type value=PUT> 2012 PHPConf 11
  • 12. 將 PUT,DELETE 一併寫成 POST API 2012 PHPConf 12
  • 13. REST Response Format?● JSON*● XML● Array● Html● CSV 2012 PHPConf 13
  • 14. 現在皆以 JSON 為主 格式簡單 , 相容性高 , 閱讀方便 2012 PHPConf 14
  • 15. Javascript Object Notation { key1: value1, key2: 20121103 key3: [1,2,3] } 2012 PHPConf 15
  • 16. JSON in Javascript is familiar var object = { key1: value1, key2: 20121103 key3: [1,2,3] } 2012 PHPConf 16
  • 17. JSON in PHP (encode) PHP Outputs<?phpecho json_encode(array( {key: value} key => value)); 2012 PHPConf 17
  • 18. JSON in PHP (decode) PHP Outputs<?php$json_data = {key: value}; array( key => valueecho json_decode({ ); key => value}); 2012 PHPConf 18
  • 19. 你不可不知的 JSON 基本介紹 http://goo.gl/Wvhwb 2012 PHPConf 19
  • 20. API Design 2012 PHPConf 20
  • 21. 良好的 API 設計● Simple 簡單● Intuitive 直觀的● Stable 穩定● Well Document 線上文件 2012 PHPConf 21
  • 22. Using Facebook API 2012 PHPConf 22
  • 23. Fucking Stable and Document 2012 PHPConf 23
  • 24. 請務必撰寫 API 線上文件 2012 PHPConf 24
  • 25. 大家每天在花在討論的時間太長 Debug 時間變少 2012 PHPConf 25
  • 26. 良好的文件減少人與人溝通成本 團隊合作 2012 PHPConf 26
  • 27. Http Method RFC 2616 CRUD Method● Create ● POST● Read ● GET● Update ● PUT● Delete ● DELETE 2012 PHPConf 27
  • 28. API URL Define 2012 PHPConf 28
  • 29. /API/Module/Method 2012 PHPConf 29
  • 30. Format 1: Topic Module● /API/Topic/Add● /API/Topic/Update● /API/Topic/Delete● /API/Topic/List 2012 PHPConf 30
  • 31. Format 2: Topic Module● /API/Topic/Add● /API/Topic/Update/1234● /API/Topic/Delete/1234● /API/Topic/List/sort/asc 2012 PHPConf 31
  • 32. 個人偏好格式 1 2012 PHPConf 32
  • 33. 不用記住多種不同 API 格式 2012 PHPConf 33
  • 34. API Response Format 2012 PHPConf 34
  • 35. 請勿常常修改 format ( 除非你想黑掉 ) 2012 PHPConf 35
  • 36. Example Create API Input Outputvar object = { { title: value1, title: value1, type: value2, type: value2, user_id: 1000 user_id: 1000,}; success_text: ok } http://site.com/API/Topic/Add 2012 PHPConf 36
  • 37. Example Create API Input Outputvar object = { { title: value1, title: value1, type: value2 type: value2,}; user_id: 1000, success_text: ok } http://site.com/API/Topic/Add/1000 2012 PHPConf 37
  • 38. Example Update API Input Outputvar object = { { id: 1000, id: 1000, title: value1, title: value1, type: value2 type: value2,}; success_text: ok } http://site.com/API/Topic/Update 2012 PHPConf 38
  • 39. Example Update API Input Outputvar object = { { title: value1, id: 1000, type: value2 title: value1,}; type: value2, success_text: ok } http://site.com/API/Topic/Update/1000 2012 PHPConf 39
  • 40. Example Delete API (single) Input Outputvar object = { { id: 1000 id: 1000,}; success_text: ok } http://site.com/API/Topic/Delete 2012 PHPConf 40
  • 41. Example Delete API (multiple) Input Outputvar object = { { id: [1000, 1001] id: 1000,}; success_text: ok } http://site.com/API/Topic/Delete 2012 PHPConf 41
  • 42. Example Delete API Input Outputvar object = { { id: 1000,}; success_text: ok } http://site.com/API/Topic/Delete/1000 2012 PHPConf 42
  • 43. Example Read API (Single) Input Outputvar object = { { id: 1000 id: 1000,}; success_text: ok, item: { title: Kate Upton } } http://site.com/API/Topic/List 2012 PHPConf 43
  • 44. Example Search API (Multiple) Input { Outputvar object = { id: 1000, q: Kate Upton success_text: ok,}; items: [ {title: I am kate}, {title: I am Upton} ] } http://site.com/API/Topic/List 2012 PHPConf 44
  • 45. Kate Upton 2012 PHPConf 45
  • 46. 多虧了 Youtube API 讓我在上班時增加了很多動力 2012 PHPConf 46
  • 47. How to handle versioning? 2012 PHPConf 47
  • 48. 內部 API 大改版 2012 PHPConf 48
  • 49. Old: http://site.com/v1/API/Topic/AddNew: http://site.com/v2/API/Topic/Add 2012 PHPConf 49
  • 50. 利用 URI Routing 功能Framework or mod_rewrite 2012 PHPConf 50
  • 51. http://site.com/API/Topic/Add = http://site.com/v1/API/Topic/Add 2012 PHPConf 51
  • 52. API Implementation 2012 PHPConf 52
  • 53. 不用自己造輪子 2012 PHPConf 53
  • 54. Phil Sturgeon’s CodeIgniter REST Serverhttp://github.com/philsturgeon/codeigniter-restserver 2012 PHPConf 54
  • 55. Requirements● PHP 5.2 or greater● CodeIgniter 2.1.x to 3.0-dev 2012 PHPConf 55
  • 56. How to install? 2012 PHPConf 56
  • 57. Installation● Drag and drop the following files into your applications directories – application/libraries/Format.php – application/libraries/REST_Controller.php – application/config/rest.php 2012 PHPConf 57
  • 58. Setup the config● $config[rest_default_format] = json;● $config[rest_enable_keys] = false;● $config[rest_enable_logging] = false;● $config[rest_enable_limits] = false;● $config[rest_ajax_only] = false; 2012 PHPConf 58
  • 59. Include REST Controller 2012 PHPConf 59
  • 60. require(APPPATH./libraries/REST_Controller.php); 2012 PHPConf 60
  • 61. Handling Requestsclass Topic extends REST_Controller{ public function index_get() {} public function index_post() {} public function index_update() {} public function index_delete() {}} 2012 PHPConf 61
  • 62. CRUD Requestsclass Topic extends REST_Controller{ public function list_get() {} public function add_post() {} public function update_update() {} public function delete_delete() {}} 2012 PHPConf 62
  • 63. Accessing parameters is also easy 2012 PHPConf 63
  • 64. Parameters● GET – $this->get(blah);● POST – $this->post(blah);● UPDATE – $this->update(blah);● DELETE – $this->delete(blah); 2012 PHPConf 64
  • 65. Create API Input Outputvar object = { { title: Kate Upton, id: 1000, text: Beautiful girl success_text: ok,}; } http://site.com/API/Topic/Add 2012 PHPConf 65
  • 66. Create API (POST)public function Add_post(){ if (!$this->post(title)) { $this->response(array(error => Title is required), 404); } $output = $this->lib_topic->insert($data); if ($output) { $this->response($output, 200); } else { $this->response(array(error => Insert error), 404); }} 2012 PHPConf 66
  • 67. Update API Input Outputvar object = { { id: 1000, id: 1000, title: Kate Upton, success_text: ok, text: Beautiful girl }}; http://site.com/API/Topic/Update 2012 PHPConf 67
  • 68. Update API (PUT)public function Update_put(){ if (!$this->update(id)) { $this->response(array(error => ID is required), 404); } $output = $this->lib_topic->update($this->update(id), $data); if ($output) { $this->response($output, 200); } else { $this->response(array(error => Insert error), 404); }} 2012 PHPConf 68
  • 69. Delete API Input Outputvar object = { { id: 1000 id: 1000,}; success_text: ok, } http://site.com/API/Topic/Delete 2012 PHPConf 69
  • 70. Delete API (DELETE)public function Delete_delete(){ if (!$this->delete(id)) { $this->response(array(error => ID is required), 404); } $output = $this->lib_topic->delete($this->delete(id)); if ($output) { $this->response($output, 200); } else { $this->response(array(error => Insert error), 404); }} 2012 PHPConf 70
  • 71. Read API (GET) Input Outputvar object = { { id: 1000, id: 1000, type: [1, 2] success_text: ok,}; item: { title: Kate Upton } } http://site.com/API/Topic/List 2012 PHPConf 71
  • 72. Read API (GET)public function List_get(){ if (!$this->get(id) or ) { $this->response(array(error => ID is required), 404); } $output = $this->lib_topic->list($this->get(id), $this->get(type)); if ($output) { $this->response($output, 200); } else { $this->response(array(error => Insert error), 404); }} 2012 PHPConf 72
  • 73. 目錄結構 2012 PHPConf 73
  • 74. Folder application controllers/ api/ topic.php user.php acl.php system index.php 2012 PHPConf 74
  • 75. Routing (config/routes.php) Default URL http://site.com/api/topic/Add $route[API/Topic/(:any)] = api/topic/$1; $route[API/User/(:any)] = api/user/$1; $route[API/Acl/(:any)] = api/acl/$1; New URL http://site.com/API/Topic/Add 2012 PHPConf 75
  • 76. Verify Your API 2012 PHPConf 76
  • 77. 一樣不需要自己造輪子 2012 PHPConf 77
  • 78. Phil Sturgeon’s CodeIgniter REST Clienthttps://github.com/philsturgeon/codeigniter-restclient 2012 PHPConf 78
  • 79. Requirements 2012 PHPConf 79
  • 80. Requirements● PHP 5.1+● CodeIgniter 2.0.0+● CURL● CodeIgniter Curl library: http://getsparks.org/packages/curl/show 2012 PHPConf 80
  • 81. Load Rest Client Library 2012 PHPConf 81
  • 82. Load Library// Load the rest client spark$this->load->spark(restclient/2.1.0);// Load the library$this->load->library(rest); 2012 PHPConf 82
  • 83. Setup API Server// Run some setup$this->rest->initial(xxxxxx);// twitter server$this->load->initial(http://twitter.com); 2012 PHPConf 83
  • 84. Parameter// set api path$api = /API/Topic/Add;// set api data$data = array( title => I am Kate Upton, type => girl); 2012 PHPConf 84
  • 85. Test it// GET API$this->rest->get($api, $data);// POST API$this->rest->post($api, $data);// UPDATE API$this->rest->update($api, $data);// DELETE API$this->rest->delete($api, $data); 2012 PHPConf 85
  • 86. $this->rest->debug(); Rest Client Library debug mode 2012 PHPConf 86
  • 87. 以上是 CodeIgniter PHP Framework 2012 PHPConf 87
  • 88. Implement another Framework? 2012 PHPConf 88
  • 89. Laravel PHP Framework? 2012 PHPConf 89
  • 90. public $restful = true; 2012 PHPConf 90
  • 91. class Home_Controller extends Base_Controller{ public $restful = true; public function get_index() { // } public function post_index() { // } 2012 PHPConf 91}
  • 92. More Introduction to Laravel Framework 14:20 – 14:50用 Laravel Framework 打造現代化網站應用程式 大澤木小鐵 2012 PHPConf 92
  • 93. RESTful API 就講到這裡 2012 PHPConf 93
  • 94. 如果有任何問題 2012 PHPConf 94
  • 95. 可以上 CodeIgniter 論壇 2012 PHPConf 95
  • 96. http://www.codeigniter.org.tw/forum/ 2012 PHPConf 96
  • 97. 謝謝大家及工作團隊 2012 PHPConf 97

×