原生方式实现,直接撸代码

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实例的更多相关文章

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

    接前一篇PHP实现RESTful风格的API实例(二) .htaccess :重写URL,使URL以 /restful/class/1 形式访问文件 Options +FollowSymlinks R ...

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

    接前一篇PHP实现RESTful风格的API实例(一) Response.php :包含一个Request类,即输出类.根据接收到的Content-Type,将Request类返回的数组拼接成对应的格 ...

  3. PHP实现RESTful风格的API实例(一)

    最近看了一些关于RESTful的资料,自己动手也写了一个RESTful实例,以下是源码 目录详情: restful/ Request.php 数据操作类 Response.php 输出类 index. ...

  4. PHP实现Restful风格的API

    Restful是一种设计风格而不是标准,比如一个接口原本是这样的: http://www1.qixoo.com/user/view/id/1表示获取id为1的用户信息,如果使用Restful风格,可以 ...

  5. restful风格的API

    在说restful风格的API之前,我们要先了解什么是rest.什么是restful.最后才是restful风格的API! PS(REST:是一组架构约束条件和原则,REST是Roy Thomes F ...

  6. [01] 浅谈RESTful风格的API

    1.什么是RESTful风格的API REST,即Representational State Transfer,可以理解为"(资源的)表现层状态转化". 在网络上,我们通过浏览器 ...

  7. Gin实战:Gin+Mysql简单的Restful风格的API(二)

    上一篇介绍了Gin+Mysql简单的Restful风格的API,但代码放在一个文件中,还不属于restful风格,接下来将进行进一步的封装. 目录结构 ☁ gin_restful2 tree . ├─ ...

  8. Gin实战:Gin+Mysql简单的Restful风格的API

    我们已经了解了Golang的Gin框架.对于Webservice服务,restful风格几乎一统天下.Gin也天然的支持restful.下面就使用gin写一个简单的服务,麻雀虽小,五脏俱全.我们先以一 ...

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

    在springMvc web项目中restful风格的api路径中有小数点会被过滤后台拿不到最后一个小数点的问题, 有两种解决方案: 1:在api路径中加入:.+ @RequestMapping(&q ...

随机推荐

  1. [技巧篇]08.Struts2拦截器中获取Servlet API方法

    讲课中遇到的解决Session拦截器的后腿问题,还有如何在拦截器中获取Servlet API,这里留一个备注,方便学生查找

  2. 编译redis时 提示make cc Command not found

    在linux系统上对redis源码进行编译时提示提示“make cc Command not found,make: *** [adlist.o] Error 127”. 这是由于系统没有安装gcc环 ...

  3. 删除linux上7天前后缀名.sql的文件

    #!/bin/bash#delete the file of 7 days agofind /data/mysqlbackup/ -mtime +7 -name "*.sql" - ...

  4. asp.net 文件上传,大文件上传。

    新建一个asp.net页面,在工具栏里拖入 FileUpload 上传控件.一个按钮 Button  !    !     ! 进入Button事件 //----------------------- ...

  5. Jmeter 自动化脚本录制-Badboy

    1. Badboy 录制操作(输入URL其余和平常操作一毛一样). 2. 保存结果,并Export to Jmeter,退出保存. 3. 导入已录制好的文件,添加监听器查看结果. 一般的监听器有(查看 ...

  6. 【比赛】STSRM 09

    第一题 题意:n个点,每个点坐标pi属性ai,从右往左将遇到的点向左ai范围内的点消除,后继续扫描. 现可以在扫描开始前提前消除从右往左任意点,问最少消除数(提前+扫描). n,pi,ai<=1 ...

  7. bzoj 2121 DP

    首先如果我们能处理出来i,j段能不能消掉,这样就可以直接dp转移了,设w[i]为前i为最少剩下多少,那么w[i]=w[j-1] (flag[j][i]). 现在我们来求flag[i][j],首先我们可 ...

  8. 浅谈游戏中BUFF的设计要点

    其实这类帖子并没有多少的设计理论,对于策划的提升和帮助也并不大,原因其实在于其适用性太窄,当我要设计XX象棋的时候,它就滚一边去了. 废话不多说切入正题: 游戏中的BUFF/DEBUFF我们见过很多, ...

  9. Java多线程学习(二)synchronized关键字(1)

    转载请备注地址: https://blog.csdn.net/qq_34337272/article/details/79655194 Java多线程学习(二)将分为两篇文章介绍synchronize ...

  10. ubuntu中使用virtualbox遇到Kernel driver not installed (rc=-1908)错误

    百度之后得到解决,再此做个笔记 错误提示 Kernel driver not installed (rc=-1908) The VirtualBox Linux kernel driver (vbox ...