SOAP与REST API的爱恨情仇

以前一直想写些RESTful相关的文章,却一直未付诸行动。直到最近接手一个新的项目,对这块从新温习,乘此机会写些相关帖子。欢迎你们评论留言,若有错漏之处,也望各位大佬不令赐教。javascript

话很少说,干活顶上。php


SOAP(Simple Object Access Protocol - 简单对象访问协议)定义了一种强类型的消息传递框架,该框架高度依赖XML和schemas。
REST(Representation State Transfer - 表示状态转移)是一种架构样式风格,它利用了当下被普遍采用的技术(特别是HTTP),自己却不建立任何新的标准。REST能够将数据结构序列化为XML,YAML或任何其余机器可读格式,但一般首选JSON。
 
SOAP和REST都支持构建基于应用程序的SOA(Service-oriented architecture,面向服务的架构),在实际项目中如何选择主要看业务的需求是什么。那如何选择呢?
这即是今天的重点,讨论下二者的主要区别。今天主要从一下几个方面进行区别:
 
底层协议
  • SOAP自己即是基于HTTP而发展的协议。
  • REST与HTTP几乎同样,REST规范没有强制的要求。
数据格式
  • SOAP只依靠XML来提供消息传递服务。在某些状况下,消息传递服务可能变得极其复杂。例如,经过javascript访问Web服务,
  • REST能够语言自由的选择易解析的数据格式。例如,CSV、JSON、XML、YAML等等。 
有状态
  • SOAP Web服务是无状态的,可是能够经过修改服务器上的代码轻松变为有状态的。
  • RESTful Web服务是彻底无状态的。对话状态的管理彻底由客户端进行控制。服务端不保留任何状态信息。也就是咱们一般所说的,客户端的每次请求必须携带全部可能用到的信息。

HTTP的方法使用html

  • SOAP能够对HTTP协议进行绑定。当绑定HTTP协议时,全部的SOAP请求都经过HTTP POST发送。
  • REST主要使用HTTP协议。经过HTTP GET、POST、PUT、DELETE和PATCH方法进行CRUD操做。
缓存
  • SOAP可使用HTTP传输机制,可是都转换为HTTP POST方法。而POST是非幂等的,因此没法在HTTP级别进行缓存。所以SOAP的响应须要经过 Response Caching Optimization Module给的信息进行缓存。
  • REST能够发送HTTP GET请求,GET是幂等的,所以REST可使用HTTP提供的缓存机制,使响应数据能够标记为可缓存或不可缓存。
安全
  • SOAP经过WS-SECURITY对安全进行了很好的标准化。
  • REST主要使用HTTP协议,HTTP自己是很是不安全的,但经过TLS它能够支持基础的身份认证和通讯加密,即HTTPS。此外,在服务器上还能够进一步实施安全措施。
异步处理

建立和更新一般很是消耗资源,有时会须要异步请求处理。java

  • SOAP 1.2提供了额外的标准,可保证应用的可靠性和安全性。例如:WSRM – WS-Reliable Messaging
  • REST咱们一般返回HTTP状态码202(Accepted)和队列位置,该位置上,任务的完成状态将会被按期更新(固然,咱们也能够将完成状态信息存在数据库中,并按期新增状态信息,供客户端查询)。
总结
整体而言,REST更易于开发,由于它利用了已经存在的Web,而且自由度受到限制(作出的选择更少,所以更简单)。SOAP提供了多种选择,而且开发难度也稍大一些,可是提供了更多的选择。

做者:吴家二少数据库

博客地址:https://www.cnblogs.com/cloudman-open/缓存

本文欢迎转载,但未经做者赞成必须保留此段声明,且在文章页面明显位置给出原文链接安全

相关文章
相关标签/搜索