一直想比较一下这两种风格,却不知如何落笔,最终写成了如下的FAQ形式。
什么是SOAP?
简单对象访问协议,基于XML,是一种应用协议,可以跨多种传输协议来传递消息(比如HTTP、SMTP),Soap是针对RPC的解决方案。
Soap的初衷是作为一种轻量级解决方案出现的,采用xml格式定义过程调用和返回,一个Soap消息就是一个特定格式和内容的XML文档。
什么是Restful web service?
Rest是针对Web提出的一种架构风格,Restful web service本质上就是Web,任意一个URL地址,一个HTTP网页都可以称作是Restful web service。Rest把网络上的所有事物抽象为资源,把对资源的操作抽象为CRUD,对应HTTP的PUT,Get,Post,Delete。注意此处的资源不是静态的数据,而是数据加上状态,是随时间变化的,每个资源有一个唯一的标识,URL。
1、网络上的所有事物都被抽象为资源(resource);
2、每个资源有一个唯一的资源标识(resource identifier);
3、通过通用的连接器接口(generic connector interface)对资源进行操作;
4、对资源的各种操作不会改变资源标识;
5、所有的操作都是无状态的(stateless)。
什么是架构风格?
来自Roy Thomas Fielding博士的定义:
一种架构风格是一组协作的架构约束,这些约束限制了架构元素的角色和功能,以及在任何一个遵循该风格的架构中允许存在的元素之间的关系。我觉得可以这么来理解:
架构风格是接口
如果说架构是一个对象,那么架构风格就好比是一组接口,一个特定的架构可能实现了多种架构风格,一种架构风格也可能是继承了多个基本架构风格的混合风格。
架构风格是模式
存在一组基本的架构风格,每个基本风格适用于特定的设计场景,设计师可以根据具体的应用需求进行取舍,对基本风格进行取舍、组合,确定适用于具体的需求的架构设计。而实际的软件架构就是架构设计的具体实现。
Soap是Rest风格的一种实现吗?
当然不是。
1、Soap也可以看作是一种风格,面对的应用需求是RPC,而Rest面对的应用需求是分布式超媒体系统(Web)。
2、Rest架构风格更强调数据,请求和响应消息都是数据的封装。而Soap风格更强调接口,Soap消息封装的是过程调用。REST是面向资源的,而Soap是面向接口的。
3、REST架构下,HTTP是承载协议,也是应用协议,而Soap架构下,HTTP只是承载协议,Soap才是应用协议。
什么时候用Soap?什么时候用REST?
1、过程调用用soap。如果服务是作为一种功能提供,客户端调用服务是为了执行一个功能,用Soap,比如常见的认证授权。而数据服务用REST。
2、可以定义清晰明了的正式接口的情况下,用Soap,比如在企业应用中,系统间的耦合采用面向接口的方式。
3、要更多的考虑非功能需求,比如安全、传输、协作等需求,使用Soap。
4、低带宽,客户端的处理能力受限的场合,比如在PDA,手机上消费服务,用REST。