- Ubuntu 14.04 64 Bit (lsb_release -a)
- PHP 5.5.9 (php -v)
- CodeIgniter 2.2.0 (echo CI_VERSION)
接著,透過 github.com/chriskacerguis/codeigniter-restserver 擴充 CodeIgniter:
$ wget https://raw.githubusercontent.com/chriskacerguis/codeigniter-restserver/master/application/config/rest.php -O /path/ci_proj/application/config/rest.php
$ wget https://raw.githubusercontent.com/chriskacerguis/codeigniter-restserver/master/application/libraries/Format.php -O /path/ci_proj/application/libraries/Format.php
$ wget https://raw.githubusercontent.com/chriskacerguis/codeigniter-restserver/master/application/libraries/REST_Controller.php -O /path/ci_proj/application/libraries/REST_Controller.php
接著,請確認 application/config/rest.php 設定:
$config[rest_default_format] = 'json'; // 預設為 xml
之後,就可以撰寫簡單的 RESTful API 啦:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
require(APPPATH.'/libraries/REST_Controller.php');
class Item extends REST_Controller {
public function index_get() {
$this->list_get();
}
public function index_post() {
$this->add_post();
}
public function index_put() {
$this->update_put();
}
public function index_delete() {
$this->delete_delte();
}
public function list_get() {
echo "list";
}
public function add_post() {
echo "create";
}
public function update_put() {
echo "put";
}
public function remove_delete() {
echo "remove";
}
}
測試方式:
取得清單(GET)
$ curl -X GET http://localhost/ci_proj/item/list
$ curl -X GET http://localhost/ci_proj/item/
新增資料(POST)
$ curl -X POST http://localhost/ci_proj/item/add
$ curl -X POST http://localhost/ci_proj/item/
更新資料(PUT)
$ curl -X PUT http://localhost/ci_proj/item/update
$ curl -X PUT http://localhost/ci_proj/item/
刪除資料(DELETE)
$ curl -X DELETE http://localhost/ci_proj/item/delete
$ curl -X DELETE http://localhost/ci_proj/item/
也可以用 wget --method GET/POST/PUT/DELETE 等進行測試。
至於 RESTful 常見的 HTTP STATUS CODE,可以參考 Using HTTP Methods for RESTful Services
例如:
取得清單成功回應 200 OK,失敗則為 404 NOT FOUND;新增資料成功 200 OK 或是 201 LOCATION 到新增項目的 URI,失敗為 404 NOT FOUND;更新資料成功為 200 OK,失敗為 404 NOT FOUND;刪除資料成功為 200 OK,失敗為 404 NOT FOUND。
接著,是設計每個 GET, POST, PUT, DELETE API 細節,可以分別使用 $this->get('param')、$this->post('param')、$this->put('param') 和 $this->delete('param') 取得對應資料,而回應時,需要的 HTTP Status Code 可以使用:
$this->response( array('status' => true), 200);
$this->response( array('status' => false, 'error' => 'error message'), 400);
$this->response( array('status' => false, 'error' => 'error message'), 404);
若要 debug 的話,大概可以用:
$this->response( array('status' => true, 'get' => $this->get(), 'post' => $this->post(), 'put' => $this->put(), 'delete' => $this->delete() ), 200);
搭配 curl -i -X GET|POST|PUT|DELETE -d 'key=value' 方式進行,除了可以看到 HTTP Response code 外,也能看到 get, post, put, delete 各種參數資訊:
$ curl -i -X DELETE -d "haha=hehe" CGI
HTTP/1.1 200 OK
Server: Apache/2.4.7 (Ubuntu)
X-Powered-By: PHP/5.5.9-1ubuntu4.5
Content-Length: 68
Content-Type: application/json; charset=utf-8
{"status":true,"get":[],"post":[],"put":[],"delete":{"haha":"hehe"}}
沒有留言:
張貼留言