Home  >  Article  >  php教程  >  REST的php初探

REST的php初探

WBOY
WBOYOriginal
2016-06-06 19:47:30950browse

REST是什么? REST(Representational State Transfer)是一种轻量级的Web Service架构风,其实现和操作明显比SOAP和XML-RPC更为简洁,可以完全通过HTTP协议实现,还可以利用缓存Cache来提高响应速度,性能、效率和易用性上都优于SOAP协议。 REST架构遵循了C

REST是什么?

REST(Representational State Transfer)是一种轻量级的Web Service架构风格,其实现和操作明显比SOAP和XML-RPC更为简洁,可以完全通过HTTP协议实现,还可以利用缓存Cache来提高响应速度,性能、效率和易用性上都优于SOAP协议。
REST架构遵循了CRUD原则,CRUD原则对于资源只需要四种行为:Create(创建)、Read(读取)、Update(更新)和 Delete(删除)就可以完成对其操作和处理。这四个操作是一种原子操作,即一种无法再分的操作,通过它们可以构造复杂的操作过程,正如数学上四则运算是数字的最基本的运算一样。
REST架构让人们真正理解我们的网络协议HTTP本来面貌,对资源的操作包括获取、创建、修改和删除资源的操作正好对应HTTP协议提供的GET、 POST、PUT和DELETE方法,因此REST把HTTP对一个URL资源的操作限制在GET、POST、PUT和DELETE这四个之内。这种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性。

REST的基本模式
对一个资源的操作分为四种:Create(创建)、Read(读取)、Update(更新)和Delete(删除);

例如我的某一篇帖子
http://www.bumao.com/article/23
那么对它的操作就分为四类:
更新 向URL http://www.bumao.com/article/23 发送 PUT 请求
删除 向URL http://www.bumao.com/article/23 发送 DELETE 请求
查看 向URL http://www.bumao.com/article/23 发送 GET 请求
创建新的博贴 向URL http://www.bumao.com/article 或者 http://www.bumao.com/article/24 (直接写ID,这种一般很少见) 发送 POST 请求

我想把某篇帖子置顶咋办呢?那么就得从资源角度上再来考虑针对“置顶资源”的操作了

发送 PUT 请求到 http://www.bumao.com//toparticles/23 ,OK帖子置顶了
再发送 DELETE 请求到 http://www.bumao.com//toparticles/23 ,OK置顶取消

那么以上的资源露在网上的就是:

http://www.bumao.com/article/23 (对23号这个帖子进行更新、删除、查看操作)
http://www.bumao.com/article (发表新帖子)
http://www.bumao.com//toparticles/23 (对该帖子置顶“PUT”或者取消置顶“DELETE”)

REST使用
在使用端和服务端需要明确的API文档说明,也就是要定义好POST过去的值和返回的值,这样你的使用端就可以和REST的服务端“说话”了。
比方说你发新帖子,那么文档里面会规范:
user这个变量是发帖人;title这个变量是帖子标题;content这个变量是帖子内容
返回的status表示状态;返回的code是错误码,错误码1表示什么,错误码3表示什么… (返回值一般是json或者xml格式)

如何用php实现REST?
那么你知道了这些资源怎么来利用呢?
通过php的curl函数族来搞定!基本上来说php的curl就是个http客户端模拟器,可以模拟出各类的http请求,发送给对应url并取得返回结果。

以post为例:
$ch = curl_init();
$timeout = 5;
curl_setopt ($ch, CURLOPT_URL, “http://www.bumao.com/article”); //发贴地址
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_POST,true); //设置POST方式
curl_setopt($ch, CURLOPT_POSTFIELDS,”user=ryan&title=abc&content=def”);//发送的post值
$file_contents = curl_exec($ch);//获得返回值
curl_close($ch);

之后,对照API规范来继续操作

curl_setopt ($ch, CURLOPT_PUT , true); // PUT方式
curl_setopt($ch, CURLOPT_CUSTOMREQUEST,”DELETE”); // DELETE方式

服务器端可以用 $_SERVER["REQUEST_METHOD"] 来获得http请求的方式之后该怎么处理怎么处理。

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn