前记
Web services 提供了在线的 machine-to-machine / application-to-application 的网络通信服务。
SOAP大部分应用于 企业级 的web service架构,使用WSDL语言的XML格式传输数据。
REST目前主要应用于快速,轻量开发的web service架构,主要使用JSON格式传输数据
简述
SOAP;Simple Object Access Protocol
REST;Representational State Transfer
两者都允许创建自己的API,开放给第三者使用。
- SAOP是正式的协议标准,由W3C维护,因此有严格的准则,也更加注重安全性,可以通过HTTP,SMTP等协议传输。REST只是一种约定的规范架构风格,只能通过HTTP协议传输。
- 由于SOAP是官方协议,因此更加复杂,需要更多的带宽,所以在请求反映上会慢一些。而REST正式为了解决这个问题而生,更加轻量,相比SOAP只能使用XML的方式,REST可以使用XML,YML,JSON,text平文等各种格式,性能上更好。
- SAOP不推荐点到点的使用方式,更加面向的是机器到机器之间的通讯,因此更加适用于分布式企业级的应用,REST推荐的是接口到接口,点到点的应用。
SOAP
规范
因为只通过XML格式传输数据,因此定义了严格的格式规范。
信息格式为;
- Envelope (required) – 表示信息的起始。
- Header (optional) – 包含可选的信息属性,允许以模块化方式扩展。
- Body (required) – 包含了XML的数据部分,用来向服务端传输的数据。
- Fault (optional) – 传输错误信息。
示例
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
<env:Header>
<n:alertcontrol xmlns:n="http://example.org/alertcontrol">
<n:priority>1</n:priority>
<n:expires>2001-06-22T14:00:00-05:00</n:expires>
</n:alertcontrol>
</env:Header>
<env:Body>
<m:alert xmlns:m="http://example.org/alert">
<m:msg>Pick up Mary at school at 2pm</m:msg>
</m:alert>
</env:Body>
</env:Envelope>
应用
目前主要在强调安全性的企业级服务上,例如金融,支付,CRM软件,通讯等服务。例如;使用 PayPal’s public API在你的site上添加PayPal的按钮,实现让用户用PayPal账户登陆来操作相关支付动作。
另外一个应用比如 CRM的 Salesforce,允许通过SOAP或者REST API来集成Salesforce到自己的传统旧平台(业务基盘等的Legacy system)来满足业务需要。
另外也可应用在一些无法使用REST的场景下,比如一些银行业务,需要带有状态的一系列操作作为一个事务流处理,而REST无法提供有状态的服务,虽然SOAP默认是无状态的服务,但是它是可以通过指定 WS-* (Web Services) Specifications 支持stateful的。
REST
推荐标准
- Uniform interface – 统一的接口,来自不同客户端的请求必须使用同样的 URI 获取资源。
- Client-server separation – 客户端和服务端完全分离,他们之间只通过请求/回复 通讯。
- Statelessness – 服务端不应该保存有服务端sessions, 每一个请求都应该包含所有服务端需要知道的信息
- Cacheable resources – 服务端的responses中应该包含是否允许对发送的data进行cacheable的情报。Cacheable resources中包含版本号,客户端使用版本号来避免多次请求同样的data。
- Layered system – 服务器端可能会有多层的架构,但这不应该影响来自客户端的request和response。
- Code on demand [optional] – 如果必要的话,response应该包含客户端可以直接执行的可执行代码,例如(e.g., JavaScript within an HTML response)
应用
目前很有快速开发的团队都在开发对外提供的APIs,例如 Twitter 有大量的对外APIs,比如用来查询历史记录的 historical tweets,用来自编程管理AD的 Ad API等。另外The WordPress也有对外开发的endpoints,由于REST应用了HTTP协议,因此可以方便的使用Get,Post,Put,Delete的服务接口,倡导数据作为资源(e.g. user) 处理,也是AWS正在倡导的理念。而SOAP仍然是把数据作为一种服务 (e.g. getUser)来提供的理念。
比较
- | SOAP | REST |
含义 | Simple Object Access Protocol | Representational State Transfer |
设计 | 有预先定义的规则需要遵守的标准协议 | 一种提供guidelines的架构风格 |
理念 | 函数驱动(数据作为服务e.g.: “getUser”) | 数据驱动(数据作为资源e.g.: “user”) |
状态 | 缺省无状态,可以设置为SOAP API stateful | 无状态 (no server-side sessions) |
缓存 | API的调用不能被缓存 | 可以缓存 |
安全 | 支持带有SSL的WS-Security,内置ACID规范 | 支持HTTPS和SSL |
性能 | 需要更多的带宽和计算能力 | 占用资源少 |
信息格式 | 只支持XML | text平文,HTML,XML,JSON,YAML等 |
传输 | 可通过HTTP,SMTP,UDP等其他 | 只有HTTP |
推荐应用 | 企业级的应用,注重安全性的应用,分布式系统,金融,支付,通讯类 | 移动开发,社交类开发等 |
优势 | 高安全性,标准,可扩展 | 高性能,灵活,对浏览器友好 |
劣势 | 低性能,复炸,不灵活 | 安全性低,不适合分布式系统 |