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实例(二) .htaccess :重写URL,使URL以 /restful/class/1 形式访问文件 Options +FollowSymlinks R ...
- PHP实现RESTful风格的API实例(二)
接前一篇PHP实现RESTful风格的API实例(一) Response.php :包含一个Request类,即输出类.根据接收到的Content-Type,将Request类返回的数组拼接成对应的格 ...
- PHP实现RESTful风格的API实例
原生方式实现,直接撸代码 Request.php :包含一个Request类,即数据操作类.接收到URL的数据后,根据请求URL的方式(GET|POST|PUT|PATCH|DELETE)对数据进行相 ...
- PHP实现Restful风格的API
Restful是一种设计风格而不是标准,比如一个接口原本是这样的: http://www1.qixoo.com/user/view/id/1表示获取id为1的用户信息,如果使用Restful风格,可以 ...
- restful风格的API
在说restful风格的API之前,我们要先了解什么是rest.什么是restful.最后才是restful风格的API! PS(REST:是一组架构约束条件和原则,REST是Roy Thomes F ...
- [01] 浅谈RESTful风格的API
1.什么是RESTful风格的API REST,即Representational State Transfer,可以理解为"(资源的)表现层状态转化". 在网络上,我们通过浏览器 ...
- Gin实战:Gin+Mysql简单的Restful风格的API(二)
上一篇介绍了Gin+Mysql简单的Restful风格的API,但代码放在一个文件中,还不属于restful风格,接下来将进行进一步的封装. 目录结构 ☁ gin_restful2 tree . ├─ ...
- Gin实战:Gin+Mysql简单的Restful风格的API
我们已经了解了Golang的Gin框架.对于Webservice服务,restful风格几乎一统天下.Gin也天然的支持restful.下面就使用gin写一个简单的服务,麻雀虽小,五脏俱全.我们先以一 ...
- springMvc中restful风格的api路径中把小数点当参数,SpringMvc中url有小数点
在springMvc web项目中restful风格的api路径中有小数点会被过滤后台拿不到最后一个小数点的问题, 有两种解决方案: 1:在api路径中加入:.+ @RequestMapping(&q ...
随机推荐
- C++中未初始化的bool值的问题
原创文件,欢迎阅读,禁止转载. 问题描述 你见过一个这样的bool值吗,判断 var 和 !var 都是成立的,今天被我遇到了,是在一个坑里遇到的.今天调试了一个程序,发送一个网络消息,结果总是得不到 ...
- java获取文件名的三种方法
import java.io.File; import java.util.Arrays; public class FileName { /** * @param args */ public st ...
- JQuery 1.8.3对IE9兼容问题getAttribute
jQuery1.8.3在IE9下attr报错问题 jQuery1.8.3在IE9中attr方法保存. 解决方案如下: r = e.getAttribute(n); 修改为: r = e.getAttr ...
- Microsoft Office 2010/2013安装组件预设
日常维护中,多台电脑需要安装Office,可是Office包含的组件又很多(Excel/Word/PPT/OUTLOOK/ACCESS等),有些是不需要的,默认情况下Office都默认安装,一个一个调 ...
- H3C IRF mad检测
这里 irf 两个交换机 S4 S5 S4 S4的MEmber id 为1 IRF member 1 renumber 1 S4的 irf 优先为10 irf member priority 10 链 ...
- SQL导入Excel文件
如果表已存在,SQL语句为: insert into aa select * from OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0', 'Data Source=D ...
- 基于VC的ACM音频编程接口压缩Wave音频(一)
(一)概述 音频数据一般都具有较高的采样率,经过压缩的原始数据才具有实用价值,否则不仅要占用大量存储空间而且在播放或进行网络传输时效率也是非常低下的,所以音频数字压缩编码在多媒体应用中有着广泛而又重要 ...
- NSIS(001)检测和结束进程是否运行?
配合插件:killer.dll 导入DLL:ReserveFile "${NSISDIR}\Plugins\killer.dll" 使用方法: ;可以检测和结束32位程序进程和64 ...
- java.lang.OutOfMemoryError: Java heap space解决方法
引起java.lang.OutOfMemoryError: Java heap space异常,可能是由JAVA的堆栈设置太小的原因 根据网上的答案大致有以下两种解决方法: 1.在D:/apache- ...
- 攒机I7
CPU : I7 4790K +Z97 = 3200 散热器 :九州风神玄冰400 = 99 硬盘 :希捷 1TB 64M = 310 机箱: 金河田超越白 = 200 内存 DDR3金士顿8G = ...