Web Services:REST还是SOAP?

[转自] http://heshun.org/?p=200

在实现web service的时候,接口风格是采用Rest还是SOAP呢?首先简单介绍一下REST:

什么是REST?

Rest的全称是Representational State Transfer(可表述的状态转移),这并不是一个新概念。它的基本含义是每个URL都唯一代表某个资源,针对这个资源的操作可以抽象为4种:创建,读 取,更改,删除,分别用HTTP的4个标准方法POST、GET、PUT、DELETE来对应(详见http://en.wikipedia.org/wiki/Representational_State_Transfer#RESTful_web_services ),出于简单实现的考虑,大多采用POST实现增删改,

REST的核心概念是Resource资源。任何一个资源都可以用一个唯一的URL来标识。基于RESTful的服务是用HTTP和REST原理的简单web service实现,它是一系列资源的集合,包括三个方面:

  • 以URI为基础,如http://heshun.org/items/;
  • web service所支持的MIME类型,如 JSON , XML 或者 YAML 。可以是任何有效的MIME类型;
  • 支持POST, GET, PUT 或者 DELETE这几种HTTP协议;

什么是SOAP?

SOAP(Simple Object Access Protocol )简单对象访问协议是在分散或分布式的环境中交换信息的简单的协议,是一个基于XML的协议,它包括四个部分:SOAP封装(envelop),封装定义 了一个描述消息中的内容是什么,是谁发送的,谁应当接受并处理它以及如何处理它们的框架;SOAP编码规则(encoding rules),用于表示应用程序需要使用的数据类型的实例; SOAP RPC表示(RPC representation),表示远程过程调用和应答的协定;SOAP绑定(binding),使用底层协议交换信息。
WSDL(Web Service Description Language)Web 服务描述语言。在这之前,尚不存在一种机制,使一个业务能自动发现其预期伙伴提供的服务。而如今的电子商务需要一种解决方案来描述以下问题:

  • 您的在线业务提供什么服务?
  • 您如何调用业务服务?
  • 当用户调用您的业务服务时,该业务服务需要他/她提供什么信息?
  • 用户将如何提供这些必需信息?
  • 服务将以什么格式发送返回给用户的信息?

WSDL的使命就是试图来描述清楚以上这些问题,它使用XML来描述。底层通信采用HTTP。

谁在用REST?

现在使用REST风格的站点包括Yahooflickr 、del.icio.us API,Ebay和Amazon同时具有REST和SOAP接口。但在Amazon大约有85%的应用使用REST API,O’Reilly 的CEO Tim O’Reilly 也认为开发人员喜欢更简单的REST ,他说在复杂的场合的确用soap更适合,但他更喜欢入门门槛较低的易被广大用户人群使用的REST。

谁在用SOAP?

google的一些服务在使用SOAP,blogger还使用XML-RPC,还有很多的企业软件也用SOAP.

REST or SOAP?

REST的优点:

  • 轻量级,没有额外的XML标记;
  • 人类易理解的结果;
  • 容易组建,不需要特定的工具;
  • 松耦合,服务端方法的任何改变对客户的影响非常小;

SOAP的优点:

  • 支持复杂的数据类型,有严格的合约,能胜任复杂的场合;
  • 有相应的开发工具生成WSDL;

REST是面向资源的。而SOAP面向服务,每个请求都显式的指明了要调用的方法和参数,耦合度比较高,到底选择哪一种取决于开发人员是否方便开发(开发成本),以及是否具有良好的文档(英文原文:http://www.petefreitag.com/item/431.cfm )。另外,flickr同时具有REST和SOAP的API接口,提供的API文档也很丰富,有繁体中文版,将就着看吧。可以很直观的比较这两种实现的优劣,没有哪种绝对的适合,要结合实际的应用来考虑。

猜你喜欢

转载自daniel-tu.iteye.com/blog/1039968