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

时间: 2024-10-29 19:07:07

PHP实现RESTful风格的API实例(一)的相关文章

PHP实现RESTful风格的API实例(二)

接前一篇:PHP实现RESTful风格的API实例(一) Response.php :包含一个Request类,即输出类.根据接收到的Content-Type,将Request类返回的数组拼接成对应的格式,加上header后输出 <?php /** * 输出类 */ class Response { const HTTP_VERSION = "HTTP/1.1"; //返回结果 public static function sendResponse($data) { //获取数据

PHP实现RESTful风格的API实例(三)

接前一篇:PHP实现RESTful风格的API实例(二) .htaccess :重写URL,使URL以 /restful/class/1 形式访问文件 Options +FollowSymlinks RewriteEngine on # 重写规则 RewriteRule ^class$ index.php?class=all [nc,qsa] RewriteRule ^class/(\d+)$ index.php?class=$1 [nc,qsa] 在Apache的web目录下新建一个restf

PHP实现Restful风格的API(转)

Restful是一种设计风格而不是标准,比如一个接口原本是这样的: http://www1.qixoo.com/user/view/id/1表示获取id为1的用户信息,如果使用Restful风格,可以变成这样: http://www1.qixoo.com/user/1可以很明显的看出这样做的好处: 1.更简洁的URL,对程序员友好 2.不暴露内部代码结构,更安全 那么,如何实现这个接口呢?首先,我们需要接收到/user/1部分. $path = $_SERVER['PATH_INFO'];$ar

PHP实现Restful风格的API

Restful是一种设计风格而不是标准,比如一个接口原本是这样的: http://www1.qixoo.com/user/view/id/1表示获取id为1的用户信息,如果使用Restful风格,可以变成这样: http://www1.qixoo.com/user/1可以很明显的看出这样做的好处: 1.更简洁的URL,对程序员友好 2.不暴露内部代码结构,更安全 那么,如何实现这个接口呢?首先,我们需要接收到/user/1部分. $path = $_SERVER['PATH_INFO'];$ar

[01] 浅谈RESTful风格的API

1.什么是RESTful风格的API REST,即Representational State Transfer,可以理解为"(资源的)表现层状态转化". 在网络上,我们通过浏览器输入url,来访问和获取到所需要的资源.这里的url,是对资源位置的定位描述,其实也是一种资源的具体呈现的方式,即这里所说的"表现层".我们访问资源的过程涉及到数据和状态的变化,"建立在表现层(url)基础上使资源状态发生变化",也即"表现层状态转化(REST

Yii2实现RESTful风格的API中要注意的坑

Yii2实现RESTful风格的API的流程如下:1.WEB前端(frontend)和后端(backend)的同级目录,新建一个文件夹,命名api,api中文件完全复制一份原始的backend中文件即可 2.需要修改common\config\bootstrap.php文件,对新建的应用增加alias别名 Yii::setAlias('@api', dirname(dirname(DIR)) . '/api'); 3.保证你的web服务器开启rewrite规则!配置apache或nginx!这里

springMvc中restful风格的api路径中把小数点当参数,SpringMvc中url有小数点

在springMvc web项目中restful风格的api路径中有小数点会被过滤后台拿不到最后一个小数点的问题, 有两种解决方案: 1:在api路径中加入:.+ @RequestMapping("/findByIp/{ip:.+}") public Object test(@PathVariable String ip) { System.out.println(ip); return ""; } 但这种方式在web服务中感觉太过于鸡肋 所以在springMvc.

测开大佬告诉你:如何5分钟快速创建restful风格的API接口-使用django restframework框架

一.思考?? 1.创建API接口难吗? 软件测试工程师: 只测过API接口, 从没创建过 应该需要掌握一门后端开发语言和后端开发框架吧!? 脑容量有限,想想就可怕 2.如何创建API接口呢? 使用Django restframework能快速创建符合restful风格的API接口 通过Django restframework框架提供的序列化器.视图集可轻轻松松实现 简单高效,学习成本低 二.搭建项目工程???? 1.创建项目 打开pycharm 创建项目 使用豆瓣源安装Django Django

restful 风格 web api规范

协议:http/https 域名 : http://api.example.com/xxx/xxx api: 标明api接口服务 xxx: 服务 xxx: 资源 版本控制: 一.使用MediaType,即在请求头header中做版本控制,数据格式等控制 想要获取的资源格式 GET /user/123456 HTTP/1.1 Accept: application/vnd.123456.user-v3+json 获取v3版userid为123456 的用户信息,返回资源格式为json 响应的文本格