Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
2012 Taiwain PHPConf RESTful API Design & Imple...
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Bo-Yi Wu
November 03, 2012
Technology
360
6
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
2012 Taiwain PHPConf RESTful API Design & Implementation with CodeIgniter PHP Framework
Introduction to RESTFul API with CodeIgniter or Laravel PHP Framework
Bo-Yi Wu
November 03, 2012
More Decks by Bo-Yi Wu
See All by Bo-Yi Wu
從觀望到全公司落地:AI Agentic Coding 導入實戰 — 流程整合與安全治理
appleboy
1
1.7k
打造你的 AI 工作流:Agent Skill + MCP 實戰工作坊
appleboy
0
1.2k
從開發到部署全都交給 AI:實作 AI 驅動的自動化流程
appleboy
1
310
AI 不只幫你寫 Code: 當專案從 300 暴增到 1500, 我們如何撐住 DevOps
appleboy
1
430
Agent Skill 是什麼?對軟體產業帶來的變化
appleboy
0
3.2k
用 Claude Code + GitHub Copilot Review 打造 AI 驅動的開發流程
appleboy
0
2.1k
戰略轉變:從建構 AI 代理人到發展可擴展的技能生態系統
appleboy
0
340
The Smart Choice for Command-Line Image Resizing
appleboy
0
70
SSH for GitHub Actions
appleboy
0
360
Other Decks in Technology
See All in Technology
【CEDEC2026】次世代デジタルカードゲームのサーバー設計と運用 〜『Shadowverse: Worlds Beyond』の舞台裏~
cygames
PRO
1
960
【CEDEC2026】『ウマ娘 プリティーダービー』 英語版のキャラクターの方言や口調をローカライズするための創造的アプローチ
cygames
PRO
1
200
20260608_Codexの可能性_ノンプログラマー向け_大城追記
doradora09
PRO
0
780
研究開発部の紹介 / Sansan R&D Profile
sansan33
PRO
4
24k
[しろおび夏祭り2026] チャットするAIから、作業するAIへ - 使われ方の変化と、その裏側で起きていること
kk0n
0
1.6k
20分でわかるセキュアAPI
nwiizo
0
180
【5分でわかる】セーフィー エンジニア向け会社紹介
safie_recruit
0
53k
Issue設計から始める仕様駆動開発 / 20260731 Mizuki Hirata
shift_evolve
PRO
1
150
【CEDEC2026】『GRANBLUE FANTASY: Relink - Endless Ragnarok』のバトル制作事例 ~最高のキャラゲーを目指して~
cygames
PRO
0
220
グローバル基準のSREは、運用現場でどう機能したか:成熟度アセスメントの実践 / SRE NEXT 2026
sorawatanabe
0
130
社内の7割が使うデータ基盤を、 データチーム2人で回すためにやったこと
koh_yoshi
4
1.1k
トヨタ⽣産⽅式(TPS)⼊⾨
recruitengineers
PRO
2
610
Featured
See All Featured
Building AI with AI
inesmontani
PRO
1
1.1k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
64
56k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
480
The Mindset for Success: Future Career Progression
greggifford
PRO
0
440
Facilitating Awesome Meetings
lara
57
7.1k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
670
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.7k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
3k
Design in an AI World
tapps
1
270
The Limits of Empathy - UXLibs8
cassininazir
1
590
Transcript
RESTful API Design & Implementation with CodeIgniter PHP Framework 2012
PHP Conference
2012 PHPConf 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 3 Who Am I • Open Source Contributions
(github: appleboy) – CodeIgniter-Native-Session – CodeIgniter-i18n – CodeIgniter-Template – CodeIgniter-Nexmo-Message – CodeIgniter-TextMagic-API
2012 PHPConf 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 5 Outline • Restful API Basic • API
Design • Implementing API with CodeIgniter • Verify your API
2012 PHPConf 6 Restful API Basic Restful API Basic
2012 PHPConf 7 Why Use Restful? Restful API Service Database
(MySQL,MongoDB)
2012 PHPConf 8 What is REST? Http Method • POST
• GET • PUT • DELETE • OPTIONS Define in RFC 2616
2012 PHPConf 9 並非所有的瀏覽器都支援 PUT, DELETE http://api.jquery.com/jQuery.ajax/
2012 PHPConf 10 如何解決未支援的瀏覽器
2012 PHPConf 11 <input type='hidden' name='type' value='PUT'>
2012 PHPConf 12 將PUT,DELETE一併寫成POST API
2012 PHPConf 13 REST Response Format? • JSON* • XML
• Array • Html • CSV
2012 PHPConf 14 現在皆以 JSON JSON 為主 格式簡單 , 相容性高
, 閱讀方便
2012 PHPConf 15 Javascript Object Notation { key1: 'value1', key2:
20121103 key3: [1,2,3] }
2012 PHPConf 16 JSON in Javascript is familiar var object
= { key1: 'value1', key2: 20121103 key3: [1,2,3] }
2012 PHPConf 17 JSON in PHP (encode) PHP <?php echo
json_encode(array( 'key' => 'value' )); Outputs {key: 'value'}
2012 PHPConf 18 JSON in PHP (decode) PHP <?php $json_data
= '{key: value}'; echo json_decode({ 'key' => 'value' }); Outputs array( 'key' => 'value' );
2012 PHPConf 19 你不可不知的 JSON JSON 基本介紹 http://goo.gl/Wvhwb
2012 PHPConf 20 API Design API Design
2012 PHPConf 21 良好的 API 設計 • Simple 簡單 •
Intuitive 直觀的 • Stable 穩定 • Well Document 線上文件
2012 PHPConf 22 Using Facebook API Using Facebook API
2012 PHPConf 23 Fucking Stable and Document Fucking Stable and
Document
2012 PHPConf 24 請務必撰寫 API API 線上文件
2012 PHPConf 25 大家每天在花在討論的時間太長 Debug 時間變少
2012 PHPConf 26 良好的文件減少人與人溝通成本 團隊合作
2012 PHPConf 27 Http Method RFC 2616 • Create •
Read • Update • Delete • POST • GET • PUT • DELETE CRUD Method
2012 PHPConf 28 API URL Define API URL Define
2012 PHPConf 29 /API/ /API/Module Module/ /Method Method
2012 PHPConf 30 Format 1: Topic Module • /API/Topic/Add •
/API/Topic/Update • /API/Topic/Delete • /API/Topic/List
2012 PHPConf 31 Format 2: Topic Module • /API/Topic/Add •
/API/Topic/Update/1234 • /API/Topic/Delete/1234 • /API/Topic/List/sort/asc
2012 PHPConf 32 個人偏好格式 1
2012 PHPConf 33 不用記住多種不同 API API 格式
2012 PHPConf 34 API Response Format API Response Format
2012 PHPConf 35 請勿常常修改 format format ( 除非你想黑掉 )
2012 PHPConf 36 Example Create API var object = {
title: 'value1', type: 'value2', user_id: '1000' }; Input Output { title: 'value1', type: 'value2', user_id: '1000', success_text: 'ok' } http://site.com/API/Topic/Add
2012 PHPConf 37 Example Create API var object = {
title: 'value1', type: 'value2' }; Input Output { title: 'value1', type: 'value2', user_id: '1000', success_text: 'ok' } http://site.com/API/Topic/Add/1000
2012 PHPConf 38 Example Update API var object = {
id: '1000', title: 'value1', type: 'value2' }; Input Output { id: '1000', title: 'value1', type: 'value2', success_text: 'ok' } http://site.com/API/Topic/Update
2012 PHPConf 39 Example Update API var object = {
title: 'value1', type: 'value2' }; Input Output { id: '1000', title: 'value1', type: 'value2', success_text: 'ok' } http://site.com/API/Topic/Update/1000
2012 PHPConf 40 Example Delete API (single) var object =
{ id: 1000 }; Input Output { id: '1000', success_text: 'ok' } http://site.com/API/Topic/Delete
2012 PHPConf 41 Example Delete API (multiple) var object =
{ id: [1000, 1001] }; Input Output { id: '1000', success_text: 'ok' } http://site.com/API/Topic/Delete
2012 PHPConf 42 Example Delete API var object = {
}; Input Output { id: '1000', success_text: 'ok' } http://site.com/API/Topic/Delete/1000
2012 PHPConf 43 Example Read API (Single) var object =
{ id: 1000 }; Input Output { id: '1000', success_text: 'ok', item: { title: 'Kate Upton' } } http://site.com/API/Topic/List
2012 PHPConf 44 Example Search API (Multiple) var object =
{ q: 'Kate Upton' }; Input Output { id: '1000', success_text: 'ok', items: [ {title: 'I am kate'}, {title: 'I am Upton'} ] } http://site.com/API/Topic/List
2012 PHPConf 45 Kate Upton
2012 PHPConf 46 多虧了Youtube API Youtube API讓我在上班時增加了很多動力
2012 PHPConf 47 How to handle versioning? How to handle
versioning?
2012 PHPConf 48 內部 API API 大改版
2012 PHPConf 49 Old: http://site.com/v1/API/Topic/Add New: http://site.com/v2/API/Topic/Add
2012 PHPConf 50 利用 URI Routing URI Routing 功能 Framework
or mod_rewrite Framework or mod_rewrite
2012 PHPConf 51 http://site.com/API/Topic/Add http://site.com/v1/API/Topic/Add =
2012 PHPConf 52 API Implementation API Implementation
2012 PHPConf 53 不用自己造輪子
2012 PHPConf 54 Phil Sturgeon’s CodeIgniter REST Server http://github.com/philsturgeon/codeigniter-restserver
2012 PHPConf 55 Requirements • PHP 5.2 or greater •
CodeIgniter 2.1.x to 3.0-dev
2012 PHPConf 56 How to install? How to install?
2012 PHPConf 57 Installation • Drag and drop the following
files into your application's directories – application/libraries/Format.php – application/libraries/REST_Controller.php – application/config/rest.php
2012 PHPConf 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 59 Include REST Controller Include REST Controller
2012 PHPConf 60 require(APPPATH.'/libraries/REST_Controller.php');
2012 PHPConf 61 Handling Requests class Topic extends REST_Controller {
public function index_get() {} public function index_post() {} public function index_update() {} public function index_delete() {} }
2012 PHPConf 62 CRUD Requests class Topic extends REST_Controller {
public function list_get() {} public function add_post() {} public function update_update() {} public function delete_delete() {} }
2012 PHPConf 63 Accessing parameters is also easy Accessing parameters
is also easy
2012 PHPConf 64 Parameters • GET – $this->get('blah'); • POST
– $this->post('blah'); • UPDATE – $this->update('blah'); • DELETE – $this->delete('blah');
2012 PHPConf 65 Create API var object = { title:
'Kate Upton', text: 'Beautiful girl' }; Input Output { id: '1000', success_text: 'ok', } http://site.com/API/Topic/Add
2012 PHPConf 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 67 Update API var object = { id:
1000, title: 'Kate Upton', text: 'Beautiful girl' }; Input Output { id: '1000', success_text: 'ok', } http://site.com/API/Topic/Update
2012 PHPConf 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 69 Delete API var object = { id:
1000 }; Input Output { id: '1000', success_text: 'ok', } http://site.com/API/Topic/Delete
2012 PHPConf 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 71 Read API (GET) var object = {
id: 1000, type: [1, 2] }; Input Output { id: '1000', success_text: 'ok', item: { title: 'Kate Upton' } } http://site.com/API/Topic/List
2012 PHPConf 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 73 目錄結構
2012 PHPConf 74 Folder application controllers/ api/ topic.php user.php acl.php
system index.php
2012 PHPConf 75 Routing (config/routes.php) Default URL http://site.com/api/topic/Add New 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';
2012 PHPConf 76 Verify Your API Verify Your API
2012 PHPConf 77 一樣不需要自己造輪子
2012 PHPConf 78 Phil Sturgeon’s CodeIgniter REST Client https://github.com/philsturgeon/codeigniter-restclient
2012 PHPConf 79 Requirements Requirements
2012 PHPConf 80 Requirements • PHP 5.1+ • CodeIgniter 2.0.0+
• CURL • CodeIgniter Curl library: http://getsparks.org/packages/curl/show
2012 PHPConf 81 Load Rest Client Library Load Rest Client
Library
2012 PHPConf 82 Load Library // Load the rest client
spark $this->load->spark('restclient/2.1.0'); // Load the library $this->load->library('rest');
2012 PHPConf 83 Setup API Server // Run some setup
$this->rest->initial('xxxxxx'); // twitter server $this->load->initial('http://twitter.com');
2012 PHPConf 84 Parameter // set api path $api =
'/API/Topic/Add'; // set api data $data = array( 'title' => 'I am Kate Upton', 'type' => 'girl' );
2012 PHPConf 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 86 $this->rest->debug(); Rest Client Library debug mode
2012 PHPConf 87 以上是CodeIgniter PHP Framework
2012 PHPConf 88 Implement another Framework? Implement another Framework?
2012 PHPConf 89 Laravel PHP Framework? Laravel PHP Framework?
2012 PHPConf 90 public $restful = true;
2012 PHPConf 91 class Home_Controller extends Base_Controller { public $restful
= true; public function get_index() { // } public function post_index() { // } }
2012 PHPConf 92 More Introduction to Laravel Framework 14:20 –
14:50 用 Laravel Framework 打造現代化網站應用程式 大澤木小鐵
2012 PHPConf 93 RESTful API 就講到這裡
2012 PHPConf 94 如果有任何問題
2012 PHPConf 95 可以上 CodeIgniter CodeIgniter 論壇
2012 PHPConf 96 http://www.codeigniter.org.tw/forum/
2012 PHPConf 97 謝謝大家及工作團隊