PHP實現RESTful風格的API實例(一)
阿新 • • 發佈:2017-07-13
request restful ref turn function 數據操作 dex 進行 所有
(關於Yii2的RESTful教程請看: Yii2框架RESTful API教程)
最近看了一些關於RESTful的資料,自己動手也寫了一個RESTful實例,以下是源碼
目錄詳情:
restful/ Request.php 數據操作類 Response.php 輸出類 index.php 入口文件 .htaccess 重寫url
Request.php :包含一個Request類,即數據操作類。接收到URL的數據後,根據請求URL的方式(GET|POST|PUT|PATCH|DELETE)對數據進行相應的增刪改查操作,並返回操作後的結果:
<?php /** * 數據操作類 */ class Request { //允許的請求方式 private static $method_type = array(‘get‘, ‘post‘, ‘put‘, ‘patch‘, ‘delete‘); //測試數據 private static $test_class = array( 1 => array(‘name‘ => ‘托福班‘, ‘count‘ => 18), 2 => array(‘name‘ => ‘雅思班‘, ‘count‘ => 20), ); public static function getRequest() { //請求方式 $method = strtolower($_SERVER[‘REQUEST_METHOD‘]); if (in_array($method, self::$method_type)) { //調用請求方式對應的方法 $data_name = $method . ‘Data‘; return self::$data_name($_REQUEST); } return false; } //GET 獲取信息 private static function getData($request_data) { $class_id = (int)$request_data[‘class‘]; //GET /class/ID:獲取某個指定班的信息 if ($class_id > 0) { return self::$test_class[$class_id]; } else {//GET /class:列出所有班級 return self::$test_class; } } //POST /class:新建一個班 private static function postData($request_data) { if (!empty($request_data[‘name‘])) { $data[‘name‘] = $request_data[‘name‘]; $data[‘count‘] = (int)$request_data[‘count‘]; self::$test_class[] = $data; return self::$test_class;//返回新生成的資源對象 } else { return false; } } //PUT /class/ID:更新某個指定班的信息(全部信息) private static function putData($request_data) { $class_id = (int)$request_data[‘class‘]; if ($class_id == 0) { return false; } $data = array(); if (!empty($request_data[‘name‘]) && isset($request_data[‘count‘])) { $data[‘name‘] = $request_data[‘name‘]; $data[‘count‘] = (int)$request_data[‘count‘]; self::$test_class[$class_id] = $data; return self::$test_class; } else { return false; } } //PATCH /class/ID:更新某個指定班的信息(部分信息) private static function patchData($request_data) { $class_id = (int)$request_data[‘class‘]; if ($class_id == 0) { return false; } if (!empty($request_data[‘name‘])) { self::$test_class[$class_id][‘name‘] = $request_data[‘name‘]; } if (isset($request_data[‘count‘])) { self::$test_class[$class_id][‘count‘] = (int)$request_data[‘count‘]; } return self::$test_class; } //DELETE /class/ID:刪除某個班 private static function deleteData($request_data) { $class_id = (int)$request_data[‘class‘]; if ($class_id == 0) { return false; } unset(self::$test_class[$class_id]); return self::$test_class; } }
下一篇PHP實現RESTful風格的API實例(二)
PHP實現RESTful風格的API實例(一)