学习RESTFul架构

1、RESTFul介绍php

1.一种软件架构风格,设计风格而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件能够更简洁,更有层次,更易于实现缓存等机制。html

REST(英文:Representational State Transfer,简称REST)描述了一个架构样式的网络系统,好比 web 应用程序。它首次出如今 2000 年 Roy Fielding 的博士论文中,他是 HTTP 规范的主要编写者之一。在目前主流的三种Web服务交互方案中,REST相比于SOAP(Simple Object Access protocol,简单对象访问协议)以及XML-RPC更加简单明了,不管是对URL的处理仍是对Payload的编码,REST都倾向于用更加简单轻量的方法设计和实现。值得注意的是REST并无一个明确的标准,而更像是一种设计的风格。python

原则条件
REST 指的是一组架构约束条件和原则。知足这些约束条件和原则的应用程序或设计就是 RESTful。
Web 应用程序最重要的 REST 原则是,客户端和服务器之间的交互在请求之间是无状态的。从客户端到服务器的每一个请求都必须包含理解请求所必需的信息。若是服务器在请求之间的任什么时候间点重启,客户端不会获得通知。此外,无状态请求能够由任何可用服务器回答,这十分适合云计算之类的环境。客户端能够缓存数据以改进性能。web

在服务器端,应用程序状态和功能能够分为各类资源。资源是一个有趣的概念实体,它向客户端公开。资源的例子有:应用程序对象、数据库记录、算法等等。每一个资源都使用 URI (Universal Resource Identifier) 获得一个惟一的地址。全部资源都共享统一的接口,以便在客户端和服务器之间传输状态。使用的是标准的 HTTP 方法,好比 GET、PUT、POST 和 DELETE。Hypermedia 是应用程序状态的引擎,资源表示经过超连接互联。算法

http://baike.baidu.com/view/5798116.htmthinkphp


2.REST(Representational State Transfer表述性状态转移)是一种针对网络应用的设计和开发方式,能够下降开发的复杂性,提升系统的可伸缩性。REST提出了一些设计概念和准则:
一、网络上的全部事物都被抽象为资源(resource);
二、每一个资源对应一个惟一的资源标识(resource identifier);
三、经过通用的链接器接口(generic connector interface)对资源进行操做;
四、对资源的各类操做不会改变资源标识;
五、全部的操做都是无状态的(stateless)。数据库

须要注意的是,REST是设计风格而不是标准。REST一般基于使用HTTP,URI,和XML以及HTML这些现有的普遍流行的协议和标准。apache

传统的请求模式和REST模式的请求模式区别:json

做用 传统模式 REST模式
列举出全部的用户 GET /users/list GET /users
列出ID为1的用户信息 GET /users/show/id/1 GET /users/1
插入一个新的用户 POST /users/add POST /users
更新ID为1的用户信息 POST /users/mdy/id/1 PUT /users/1
删除ID为1的用户 POST /users/delete/id/1 DELETE /users/1

 

关于更多的REST信息,能够参考:http://zh.wikipedia.org/wiki/RESTsegmentfault


二.使用RESTFul的好处


a.我理解你的问题应该是“把传统的PHP Web接口改为符合RESTful风格的Web接口有什么用处?”

其实,这里最好用“好处”这个词来代替“用处”,由于传统的Web接口实现方式一样可以实现业务须要(因此这不是一个必须的事情,须要本身根据业务需求综合判断是否须要采用),而改用“RESTful风格”会有一些额外的“好处”:

统一的风格可以让各方更加便利的进行交互,也带来了更好的兼容性(这是一个全部遵循必定规范所带来的共通的好处,就像你们都说普通话,交流起来多方便啊)

对资源的操做正好对应相应的HTTP动做(GET、POST、PUT、DELETE),而这些动做正好能够知足咱们对资源状态进行操做的须要,也就是说想对资源状态进行什么样的操做就选择什么样的动做,而这些动做又是HTTP协议自己提供的,多么和谐天然啊(就是题主的摘录内容)

请求所形成的影响明确,或者说反作用明确,好比GET确定是安全的,PUT和DELETE确定是幂等得,POST确定是不安全的(这里的确定是创建在API设计彻底遵循“RESTful风格”基础上的)

良好的符合“RESTful风格”的URI设计,可让Web接口的功能和总体结构更加清晰,仅仅经过URI就能方便的推测出来接口是作什么的,以及多个资源之间关联性

利用HTTP内容协商(content negotiation)实现资源的多重表述,好比请求方能够把本身须要的格式放到头信息的Accept字段中表述(如Accept: text/json),这样一样一个URI就能够输出多种格式而再也不须要在URI里面特别加上一个type=json的参数了

客户端、代理服务器等能够根据HTTP协议规范进行相应的额外处理,好比Cache

... 可能还有我没总结到的好处(固然也会有一些不足~~)

上述,主要是列举了“RESTful风格”与传统设计比较带来的好处,可是最重要并让RESTful流行起来的缘由,应该是RESTful在实现网络服务(Web service)方面比XML-RPC/SOAP等协议更加轻量级、拥有更好的透明性和伸缩性所致,这个就又能够解释不少了,再也不赘述,推荐下面2偏文章供继续深刻了解。

阮一峰:理解RESTful架构
REST vs XML-RPC vs SOAP – pros and cons

 

 

b.RESTFul为何流行?说白了就一个缘由:简单。

对API consumer来讲,开发调试RESTFul API只须要有curl就好。

相比SOAP来讲,没有client code自动生成。相比thrift来讲,RESTFul又有HTTP协议带来的巨大overhead。

c.不明白的东西就能够暂时不碰,若是须要用到了再学。若是你有心情了解一下RESTful的话,wikipedia里面就有一堆连接,能够了解它的含义、做用、应用场景以及相关技术(好比SOAP)。

REST是HTTP层面的东西,和PHP或者任何其余语言都无关。它是一种约定俗成的HTTP请求语义的习惯,或者说开放、管理服务器资源的习惯,不是具体技术层面的东西。和全部其余的习惯、约定同样,你彻底能够不遵照它,而遵照RESTful天然会带来一些优点(好比GET和PUT是idempotent的,在发起和处理请求的时候就能够少量多验证一致性的逻辑)。

一个很优秀的例子是CouchDB的RESTful API:http://wiki.apache.org/couchdb/HTTP_Document_API

 

 

d.其余的回答都很好, 这里从另一个角度简单说一下个人见解

若是你只是作一次性的项目, REST是可选项, 你只要把数据弄对了就能够了

若是你是作本身的产品, 那么为了代码的可维护性, 你也许会参考一下REST标准, 团队里面统一一下, 能REST就REST, 目的是为了减小沟通成本, 提升生产效率, 鼓舞士气(让你们都以为本身在一个NB的团队里)

若是你是作一个开放平台的, 尤为是世界级别的开放平台好比FB和Twitter, 那么你别无选择, 全世界都在看着呢, 一个API的变化就会引起无数口水和新闻报道, 当来也可能引起bug. 这种状况请本身掂量.

我的观点: 我通常工做在第二中状态, 追求的是生产效率. 能够明确的告诉你, REST不能保证生产效率的提升, 适当使用, 看状况使用, 要学习但不要纠结.

 

e.个人建议是

一、换一个语言。
我如今也以为难以置信:我在我初学PHP的一年里都没有接触到任何有关HTTP的知识。而当我写python和Node.js的时候,次日就遇到了。逼着本身去查询资料,而后学会了。
一样的问题还有,PHP初学者有几个知道:buffer,BDD,cgi等等等...

二、阅读《HTTP权威指南》,一本号称阅读完月薪至少能拿到1w的书。

f.和传统SOAP相比,实现的结果是同样的,即提供web service,但就访问方式和风格上会简单不少

https://segmentfault.com/q/1010000000319475


延伸阅读:
http://www.ruanyifeng.com/blog/2011/09/restful
http://www.ruanyifeng.com/blog/2014/05/restful_api.html
http://document.thinkphp.cn/manual_3_2.html#restful
https://segmentfault.com/q/1010000000319475
https://segmentfault.com/q/1010000000500665
http://www.baidu.com/s?wd=restful
http://www.sogou.com/web?query=restful
https://www.so.com/s?q=restful
http://www.baidu.com/s?wd=restful%20php
http://www.sogou.com/web?query=restful%20php
https://www.so.com/s?q=restful%20php

相关文章
相关标签/搜索