SOAP vs REST

前记

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,开放给第三者使用。

  1. SAOP是正式的协议标准,由W3C维护,因此有严格的准则,也更加注重安全性,可以通过HTTP,SMTP等协议传输。REST只是一种约定的规范架构风格,只能通过HTTP协议传输。
  2. 由于SOAP是官方协议,因此更加复杂,需要更多的带宽,所以在请求反映上会慢一些。而REST正式为了解决这个问题而生,更加轻量,相比SOAP只能使用XML的方式,REST可以使用XML,YML,JSON,text平文等各种格式,性能上更好。
  3. SAOP不推荐点到点的使用方式,更加面向的是机器到机器之间的通讯,因此更加适用于分布式企业级的应用,REST推荐的是接口到接口,点到点的应用。

SOAP

规范

因为只通过XML格式传输数据,因此定义了严格的格式规范。
信息格式为;

  1. Envelope (required) – 表示信息的起始。
  2. Header (optional) – 包含可选的信息属性,允许以模块化方式扩展。
  3. Body (required) – 包含了XML的数据部分,用来向服务端传输的数据。
  4. 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

推荐标准

  1. Uniform interface – 统一的接口,来自不同客户端的请求必须使用同样的 URI 获取资源。
  2. Client-server separation – 客户端和服务端完全分离,他们之间只通过请求/回复 通讯。
  3. Statelessness – 服务端不应该保存有服务端sessions, 每一个请求都应该包含所有服务端需要知道的信息
  4. Cacheable resources – 服务端的responses中应该包含是否允许对发送的data进行cacheable的情报。Cacheable resources中包含版本号,客户端使用版本号来避免多次请求同样的data。
  5. Layered system – 服务器端可能会有多层的架构,但这不应该影响来自客户端的request和response。
  6. 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)来提供的理念。

比较

-SOAPREST
含义Simple Object Access ProtocolRepresentational State Transfer
设计有预先定义的规则需要遵守的标准协议一种提供guidelines的架构风格
理念函数驱动(数据作为服务e.g.: “getUser”)数据驱动(数据作为资源e.g.: “user”)
状态缺省无状态,可以设置为SOAP API stateful无状态 (no server-side sessions)
缓存API的调用不能被缓存可以缓存
安全支持带有SSL的WS-Security,内置ACID规范支持HTTPS和SSL
性能需要更多的带宽和计算能力占用资源少
信息格式只支持XMLtext平文,HTML,XML,JSON,YAML等
传输可通过HTTP,SMTP,UDP等其他只有HTTP
推荐应用企业级的应用,注重安全性的应用,分布式系统,金融,支付,通讯类移动开发,社交类开发等
优势高安全性,标准,可扩展高性能,灵活,对浏览器友好
劣势低性能,复炸,不灵活安全性低,不适合分布式系统
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值