当前位置: 首页 > 工具软件 > PHP_MVC_REST > 使用案例 >

PHP中REST初探

黄元章
2023-12-01
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请求的方式之后该怎么处理怎么处理。

 类似资料: