SOAP VS. REST

什么是SOAP?

SOAP是一个基于XML的标准化通讯规范,主要用于Web service中。SOAP的出现是为了简化网页服务器(Web Server)在从XML数据库中提取资料时,无需花时间去格式化页面,并能够让不同应用程序之间透过HTTP通讯协定,以XML格式互相交换彼此的资料,使其与编程语言、平台和硬件无关。
它包括四个部分:
1. SOAP封装(envelop)
封装基于XML,定义了一个描述信息中的内容是什么,是谁发送的,谁应当接受并处理它以及如何处理他们的框架。
2. SOAP编码规则 (encoding rules)
用于表示应用程序需要使用的数据类型的实例。
3. SOAP RPC表示 (RPC representation)
表示远程过程调用和应答的协定。
4. SOAP 绑定(binding)
使用底层协议交换信息。

什么是REST?

REST ( Representational State Transer) 是Roy Fielding提出的。Web本质上是由各种各样的资源构成,资源由URI唯一标识。浏览器或者任何其它类似浏览器的应用程序将资源的表现状态给展示出来。如果用户在页面中定向到哪些资源的链接,浏览器则将访问这些资源,并表现出它的状态。这意味着客户端应用程序随着每个资源表现状态的不同而发生状态转移,也即所谓REST。
ROA (Resource-Oriented Architecture )是一种遵循REST的设计原则,是一种把实际问题转换成REST式Web服务的方法,它使得URI, HTTP和XML具有跟其他Web应用一样的工作方式。在使用ROA进行设计时,我们需要把真实的应用需求转化成ROA中的资源,基本上遵循以下的步骤:
• 分析应用需求中的数据集
• 映射数据集到ROA中的资源
• 对于每一资源,命名它的URI
• 为每一资源设计其Representations
• 用hypermedia links表述资源间的联系

SOAP 与 REST的区别

1. SOAP面向活动,REST面向资源
面向活动的应用程序集中于您可能执行的操作,而不是集中于操作所依靠的资源。活动服务的一个简单的例子就是银行事务,在那里用户可以把钱从一个账户转移到另一个账户上。用户不想直接操作资源(钱、银行账户等等),他们只想告诉银行他们想要达到的目的,并且让银行根据他们的利益对资源进行处理。用 GoF 术语来描述应用程序:
• 命令
• 中介方
• 策略
• 代理设计模式

面向资源服务集中于明确的数据对象,一些基本、标准的操作可以依据这些数据对象而执行。在许多方面,REST 样式 Web 服务与 SQL、元组空间(tuple spaces)、简单消息列队等技术相似。它们都使用普通的简单操作针对明确的资源起作用。
• 检索资源
• 修改资源
• 创建资源
• 删除资源

2. 所有的SOAP消息发送都使用HTTP POST方法,并且所有SOAP消息的URI都是一样的,SOAP应用都通过定义自己个性化的接口方法来抽象Web服务,这更像我们经常谈到的RPC。而不同的是,RESTful Web服务使用标准的HTTP方法(GET/PUT/POST/DELETE)来抽象所有Web系统的服务能力
RESTful Web服务使用标准的HTTP方法优势:
• 提高系统与系统之间整合的互操作能力
标准化的HTTP操作方法,与其他的标准化技术,如URI,HTML,XML等,有极大的互操作能力。尤其在Web应用领域,RESTful Web服务所表达的这种抽象能力更加贴近Web本身的工作方式。
o GET – 改操作返回已标识资源的状态表示。您可以通过大量的上下文要素来确定状态,例如谁正在提交请求、操作的参数(传入的参数如 HTTP 头或者查询字符串参数)和服务提供方维护的当前会话状态。
o POST - 该操作执行对已标识资源的一些特定于应用程序形式的更新。该操作行为完全依赖于实现它的服务。由该操作返回的数据也完全依赖于应用程序。举例来说,像 GET 操作一样,它可以返回一个状态表示,它还可以选择根本不返回任何数据。
o PUT - 该操作在已标识位置(URI)创建新资源。操作输入必须包括一个资源的状态表示。它完全依赖服务来创建基于这个状态表示的资源。
o DELETE - DELETE 操作销毁已标识位置(URI)的资源。

• HTTP方法本身的优势
o 无状态性 (Stateless)
HTTP协议是一种无状态协议,客户端发出的HTTP请求之间可以相互隔离,不存在相互的状态依赖。基于HTTP的ROA,以非常自然的方式来实现无状态服务请求处理逻辑。对于分布式应用而言,任意给定的两个服务请求 Request 1 与 Request 2, 由于它们之间并没有相互之间的状态依赖,就不需要对它们进行相互协作处理,其结果是:Request 1 与 Request 2 可以在任何的服务器上执行,这样的应用很容易在服务器端支持负载平衡 (load-balance)。
o 安全操作与幂指相等特性 (Safety /Idempotence)
HTTP 的 GET、HEAD 请求本质上应该是安全的调用,即:GET、HEAD 调用不会有任何的副作用,不会造成服务器端状态的改变。对于服务器来说,客户端对某一 URI 做 n 次的 GET、HAED 调用,其状态与没有做调用是一样的,不会发生任何的改变。
HTTP 的 PUT、DELTE 调用,具有幂指相等特性 , 即:客户端对某一 URI 做 n 次的 PUT、DELTE 调用,其效果与做一次的调用是一样的。HTTP 的 GET、HEAD 方法也具有幂指相等特性。
HTTP 这些标准方法在原则上保证你的分布式系统具有这些特性,以帮助构建更加健壮的分布式系统。

SOAP 与 REST孰优孰略

REST和SOAP各有千秋。

REST的优点:
• 轻量级,没有额外的XML标记;
• 从技术上来说,REST可以实现SOAP能实现的所有功能,而且更为简单
• 容易组建,不需要特定的工具;
• 松耦合,服务端方法的任何改变对客户的影响非常小;
SOAP的优点:
• 支持复杂的数据类型,有严格的合约,能胜任复杂的场合;
• 有相应的开发工具生成WSDL;
• REST目前基于HTTP/HTTPS;而SOAP可支持任何传输协议,从HTTP/HTTPS到SMTP(Simple Mail Transfer Protocol,简单邮件传送协议),甚至JMS(Java Messaging Service,Java消息传递服务)。不过,由于XML较为冗长且解析费时,因此采用XML也成为一个弊端。

REST的适用场合包括:
• 有限的带宽和资源 别忘了返回的结构可以采用(由开发者定义的)任何格式。另外,由于REST采用标准的GET、PUT、POST和DELETE动词,因此可被任何浏览器所支持。除此以外,REST还可以使用为目前大多数浏览器支持的XMLHttpRequest对象,这为AJAX增色不少。
• 完全无状态的操作 对于那些需多步执行的操作,REST并非最佳选择,采用SOAP更合适。但是,如果你需要无状态的CRUD(Create/Read/Update/Delete,创建/读取/更新/删除)操作,那么应采用REST。
• 缓存考虑 若要利用无状态操作的特性,使得信息可被缓存,那么REST是很好的选择。

SOAP的适用场合包括:
SOAP比较成熟而且是经过良好定义的,具有完整的规范。而REST只不过是一种方法,对开发未作任何规约。
• 异步处理与调用 如果你的应用需要确保可靠性与安全性,那么请采用SOAP。SOAP 1.2为确保这种操作补充定义了WSRM(WS-Reliable Messaging)等标准。
• 形式化契约 若提供者/消费者双方必须就交换格式取得一致,那么采用SOAP更合适。SOAP 1.2为这种交互提供了严格的规范。
• 有状态的操作 如果应用需要上下文信息与对话状态管理,那么应采用SOAP。SOAP 1.2为此补充定义了WS-Security、WS-Transactions和WS-Coordination等标准。相比之下,REST方法要求开发者自己来实现这些框架性工作。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值