1. 程式人生 > >PHP實現RESTful風格的API實例(一)

PHP實現RESTful風格的API實例(一)

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實例(一)