REST (REpresentational State Transfort) 形式上应该表述为客户端通过申请资源来实现状态的转换,在这个角度系统可以看成一台虚拟的状态机。抛开R. T. Fielding博士论文里晦涩的理论不说,REST应该满足这样的特点:1)客户端和服务器结构;2)连接协议具有无状态性;3)能够利用Cache机制增进性能;4)层次化的系统;说到底,REST只是一种架构风格,而不是协议或标准。但这种新的风格(也许已经历史悠久?)对现有的以SOAP为代表的Web Service造成的冲击也是革命性的,因为它面向资源,甚至连服务也抽象成资源,因为它和HTTP紧密结合,因为它服务器无状态。
目前知道的三种主流的Web服务实现方案为:
REST:表象化状态转变 (软件架构风格)
SOAP:简单对象访问协议
XML-RPC:远程过程调用协议 (已经慢慢被SOAP取代)
其他理解:
REST:表征状态转移(Representational State Transfer),采用Web 服务使用标准的 HTTP 方法 (GET/PUT/POST/DELETE) 将所有 Web 系统的服务抽象为资源,REST从资源的角度来观察整个网络,分布在各处的资源由URI确定,而客户端的应用通过URI来获取资源的表征。Http协议所抽象的get,post,put,delete就好比数据库中最基本的增删改查,而互联网上的各种资源就好比数据库中的记录(可能这么比喻不是很好),对于各种资源的操作最后总是能抽象成为这四种基本操作,在定义了定位资源的规则以后,对于资源的操作通过标准的Http协议就可以实现,开发者也会受益于这种轻量级的协议。REST是一种软件架构风格而非协议也非规范,是一种针对网络应用的开发方式,可以降低开发的复杂性,提高系统的可伸缩性。
SOAP:简单对象访问协议(Simple Object Access Protocol)是一种标准化的通讯规范,主要用于Web服务(web service)中。用一个简单的例子来说明 SOAP 使用过程,一个 SOAP 消息可以发送到一个具有 Web Service 功能的 Web 站点,例如,一个含有房价信息的数据库,消息的参数中标明这是一个查询消息,此站点将返回一个 XML 格式的信息,其中包含了查询结果(价格,位置,特点,或者其他信息)。由于数据是用一种标准化的可分析的结构来传递的,所以可以直接被第三方站点所利用。
XML-RPC:一个远程过程调用(remote procedure call,RPC)的分布式计算协议,通过XML将调用函数封装,并使用HTTP协议作为传送机制。后来在新的功能不断被引入下,这个标准慢慢演变成为今日的SOAP协定。XML-RPC协定是已登记的专利项目。XML-RPC透过向装置了这个协定的服务器发出HTTP请求。发出请求的用户端一般都是需要向远端系统要求呼叫的软件。
三种方案的简单比较
XML-RPC已慢慢的被SOAP所取代,现在很少采用了,但它还是有版权的,我在此就不作多介绍。
成熟度上:SOAP在成熟度上优于REST
效率和易用性上:REST更胜一筹(REST效率更高的原因在于,仅仅是建议的Http协议之上的一种协议。而SOAP则需要对数据、xml封装信息头,解封装等)
安全性上:SOAP安全性高于REST,因为REST更关注的是效率和性能问题
分布式能力:REST更适合在分布式环境中使用、因为REST是基于原生Http协议的,而http协议是无状态的。大型分布式环境都能够对无状态支持良好,无状态增强了整个系统的扩展性。这也是为什么越来越多的云计算,分布式项目选择REST。
(注:SOAP也是基于HTTP协议的,但是却提供了session、cookie等机制来使得SOAP有状态,从而支持需要有状态的业务。有状态举例:1、增加一个用户2、获取最新增加的用户。那1的执行成功与否,及执行先后顺序的状态将会影响2的结果。)
总体上,因为REST模式的Web服务与复杂的SOAP和XML-RPC对比来讲明显的更加简洁,越来越多的web服务开始采用REST风格设计和实现。例如,Amazon.com提供接近REST风格的Web服务进行图书查找;雅虎提供的Web服务也是REST风格的。REST对于资源型服务接口来说很合适,同时特别适合对于效率要求很高,但是对于安全要求不高的场景。而SOAP的成熟性可以给需要提供给多开发语言的,对于安全性要求较高的接口设计带来便利。所以我觉得纯粹说什么设计模式将会占据主导地位没有什么意义,关键还是看应用场景,正是那句老话:适合的才是最好的
同时很重要一点就是不要扭曲了REST现在很多网站都跟风去开发REST风格的接口,其实都是在学其形,不知其心,最后弄得不伦不类,性能上不去,安全又保证不了,徒有一个看似象摸象样的皮囊。
SOAP在安全方面是通过使用XML-Security和XML-Signature两个规范组成了WS-Security来实现安全控制的,当前已经得到了各个厂商的支持,.net ,php ,java 都已经对其有了很好的支持。REST没有任何规范对于安全方面作说明。因此在考虑安全性上,SOAP要高于REST。
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
RSqwR+F20Fdn5SkEHWZwDg==