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实例(二)

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

  • 相关阅读:
    什么样的代码称得上是好代码?
    九年程序人生 总结分享
    Docker入门 第一课 --.Net Core 使用Docker全程记录
    阿里云 Windows Server 2012 r2 部署asp.net mvc网站 平坑之旅
    Visual studio 2015 Community 安装过程中遇到问题的终极解决
    Activiti6.0 spring5 工作流引擎 java SSM流程审批 项目框架
    java 进销存 库存管理 销售报表 商户管理 springmvc SSM crm 项目
    Leetcode名企之路
    24. 两两交换链表中的节点
    21. 合并两个有序链表
  • 原文地址:https://www.cnblogs.com/luyucheng/p/6016801.html
Copyright © 2011-2022 走看看