PHP实现RESTful风格的API实例

Posted 互联网技术老兵

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP实现RESTful风格的API实例相关的知识,希望对你有一定的参考价值。

(关于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实例的主要内容,如果未能解决你的问题,请参考以下文章

PHP实现RESTful风格的API实例

PHP实现RESTful风格的API实例

PHP实现RESTful风格的API实例

PHP实现RESTful风格的API实例

PHP实现RESTful风格的API实例

PHP实现Restful风格的API