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请求的方式之后该怎么处理怎么处理。
