WebService: REST vs SOAP
万维网正经历海量数据进化到基于服务的演进,其中web service正是这次演进的重要部分。
什么是web service?
web service是两个设备跨越万维网的连接方式。W3C给web service给出的定义是:支持跨越网络的机器和机器之间交互的软件系统。他有机器可理解格式表达的接口(比如WSDL)。与之交互的其他系统根据预先定义的规则使用SOAP消息来交互,典型的,使用HTTP协议使用XML序列化来和其他系统互联。
Roy Fielding提出了更可靠的web应用架构:表示状态转移(REST)。在REST风格中,请求和应答是围绕着资源的表示状态来构建的。一个资源(比如:一个人),可以是任何被定位的东西。资源的表示常常是一个文档(比如XML或是JSON)表示当前或预期的资源状态。
什么是SOAP
SOAP是用于实现Web Service时交换结构化信息的协议。它的消息格式使用XML。他和传输协议是不相关的(可以使用HTTP,FTP,TCP,UDP,或者命名管道)。基于SOAP的服务严格的定义了来回传递的消息格式。一个SOAP消息上面含有数据和操作,头信息和失败的错误信息。由WS-Security提供安全标准,然后它是端对端的。SOAP提供了让服务想客户端描述自己的机制(WSDL),以及发现(UDDI)。SOAP同样提供了可靠的消息机制(WS-ReliableMessageing),内建了重试并提供了端到端的可靠机制。
什么是REST
表示状态转移(REST)是一种用来设计网络应用的架构风格。
- 相关的客户端和服务端各自发送请求和响应。
- 请求和响应围绕着资源的表示转移来构建(比如 User的JSON请求表示)
REST将一切东西抽象成资源(比如 用户,股票等),每个资源都实现了标准的接口(典型的是HTTP接口),资源具有名字和地址(URIs),每个资源都具有1个或多个表示(比如JSON 或 XML),在网络上使用HTTP传递。
REST网络API(或REST网络服务)是使用HTTP和REST 原则实现的网络API。RESTful API更关心用户接口(而不是数据存储)。提供了跨平台和简化服务组件(无状态),每一个来自客户端的请求都包括全部的状态信息,服务器不会再session中保存客户的上下文。
SOAP vs REST
SOAP一个主要的有点是WSDL服务描述。可以自动发现服务并生成服务代理客户端。在版本2.0中,WSDL支持所有的HTTP谓词并能很好的提供RESTful服务文档,但是WSDL相对来说比较臃肿.HTTPS对RESTful服务的安全提供支持,仅是point-to-point的。缺乏标准的信息系统和异常处理。而SOAP具有内建的成功/重试机制,且提供end-to-end的基于SOAP的可靠机制。RESTful服务一个主要的有点是其数据表示的灵活性,比如你可以序列化你的数据到XML或JSON格式。RESTful API是易于理解的,一个使用URI的元素+HTTP谓词。同时RESTful服务也是轻量的,相比xml,没有额外的标签。调用RESTful API时,只需要一个浏览器或任何一台联网的设备。