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‘];
$arr = explode(‘/‘,$path);
print_r($arr);
得到下面的结果:
Array
(
[0] =>
[1] => User
[2] => 1
)
获取到了参数,下面的操作就很简单了:
if($arr[1] == ‘user‘){
$model = new UserModel();
$id = $arr[2];
//读取用户信息
$user_info = $model->find($id);
echo json_encode($user_info);
}
这样,我们就实现了一个Restful风格的API。
下面,我们再看如何实现读取用户列表的接口,传统方式:
http://www1.qixoo.com/user/list
使用Restful风格,可以更加简洁:
http://www1.qixoo.com/user
和读取用户信息的区别是,user后面没有id,所以我们可以在读取部分的基础上做一下修改:
if($arr[1] == ‘user‘){
$model = new UserModel();
$id = $arr[2];
if($id){
//读取用户信息
$user_info = $model->find($id);
echo json_encode($user_info);
}else{
//读取用户列表
$user_list = $model->select();
echo json_encode($user_list);
}
}
这样就实现了读取用户列表的接口。
下面再看如何实现增加用户的接口,传统方式:
http://www1.qixoo.com/user/add
Restful风格:
http://www1.qixoo.com/user
和读取用户列表的接口是一样的,怎么区分呢?其实很简单,读取是GET请求,而增加是POST请求,用户信息都存在POST参数中,所以可以对代码进行下面的修改:
if($arr[1] == ‘user‘){
$model = new UserModel();
$id = $arr[2];
if($id){
//读取用户信息
$user_info = $model->find($id);
echo json_encode($user_info);
}else{
if(IS_POST){
//增加用户
$res = $model->add($_POST);
if($res){
echo ‘success‘;
}else{
echo ‘fail‘;
}
}else{
//读取用户列表
$user_list = $model->select();
echo json_encode($user_list);
}
}
}
同样的接口,可以依据HTTP请求方式来执行不同的逻辑。
这就是实现Restful风格API的核心思路,依次类推,我们可以实现编辑用户接口和删除用户接口:
http://www1.qixoo.com/user/1
只要使用不同的请求方式,就能区分开了。我们可以用PUT请求来执行编辑操作,用DELETE请求来执行删除操作。
具体代码就不写了,有兴趣的朋友可以自己尝试实现以下。
在ThinkPHP框架中也提供了对Restful风格的支持,原理也是类似的。
总结一下,Restful风格就是,使用简单的URL和HTTP请求方式来实现接口。
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实例(一)
最近看了一些关于RESTful的资料,自己动手也写了一个RESTful实例,以下是源码 目录详情: restful/ Request.php 数据操作类 Response.php 输出类 index. ...
- 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 ...
- Dubbo 03 Restful风格的API
目录 Dubbo03 restful风格的API 根路径 协议 版本 用HTTP协议里的动词来实现资源的增删改查 用例 swagger(丝袜哥) OpenAPI 资源 编写API文档 整合Spring ...
随机推荐
- Jdk1.6 HTTPS访问问题解决办法
真是艹蛋的一次经历,jdk6上面去访问别人的https,还好有百度搞定了问题.现在写下随笔,记录下; 首先要自己重写SSLSocketFactory这个类, 下面是自己重写的这个类:TLSSocket ...
- 精讲RestTemplate第8篇-请求失败自动重试机制
本文是精讲RestTemplate第8篇,前篇的blog访问地址如下: 精讲RestTemplate第1篇-在Spring或非Spring环境下如何使用 精讲RestTemplate第2篇-多种底层H ...
- python基础 Day10
python Day10 函数的参数升级版 形参角度 万能参数*arg #在函数定义时,*代表聚合.他将所有的位置参数聚合成一个元组,赋值给了args def test(*args): print(& ...
- 第2章 RDD编程(2.1-2.2)
第2章 RDD编程 2.1 编程模型 在Spark中,RDD被表示为对象,通过对象上的方法调用来对RDD进行转换.经过一系列的transformations定义RDD之后,就可以调用actions触发 ...
- JavaFX桌面应用-loading界面
上次使用JavaFX开发了一个视频转码工具,当用户点击"启动"按钮开始转码的时候,会禁用启动按钮,防止多次启动转码. 这种处理方式对用户来说可能并是很友好,其实可以在启动转码的时弹 ...
- CSS动画实例:行星和卫星
设页面中有<div class=" planet "></div>,用来绘制一个行星和卫星图形.这个图形包括三部分:行星.卫星和卫星旋转的轨道.定义. pl ...
- 计算机网络-链路层(2)多路访问控制协议(multiple access control protocol)
单一共享广播信道,如果两个或者两个以上结点同时传输,会互相干扰(interference) 冲突(collision):结点同时接收到两个或者多个信号→接收失败! MAC协议采用分布式算法决定结点如何 ...
- Web自动化必会知识:「Web基础、元素定位、元素操作、Selenium运行原理、项目实战+框架」
1.web 基础-html.dom 对象.js 基本语法 Dom 对象里面涉及元素定位以及对元素的修改.因为对元素操作当中涉及的一些 js 操作,js 基本语法要会用.得要掌握前端的基本用法.为什么要 ...
- 更改默认Xcode
更改默认 Xcode 的指令: sudo xcode-select -switch /Applications/Xcode.app 如果系统里面有好几个版本的 Xcode,可以用这个命令指定默认的 ...
- Cassandra社区是怎么测试4.0的
点击查看活动录像,获取更多技术细节. Cassandra社区是怎么测试4.0的 Cassandra 4.0的目标就是成为史上最稳定的版本.为了达到这个目的,我们需要用很多方法和工具进行测试.我今天主要 ...