zoukankan      html  css  js  c++  java
  • 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实例(二)

    如果您觉得本文对您的学习有所帮助,可通过支付宝来打赏博主,增加博主的写作动力

  • 相关阅读:
    圣洁之美BY Janosch Simon
    多线程的概念讲解
    纯CSS做背景渐变
    如何用css3的boxshadow属性来为盒子增加阴影
    下载的chm文件打不开?
    大学教程:客户关系管理(CRM)复习资料
    细说CSS的transform
    浏览网页常用快捷键
    EDM邮件营销
    黑白世界,感受不同的旅行...
  • 原文地址:https://www.cnblogs.com/luyucheng/p/6016801.html
Copyright © 2011-2022 走看看