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

话不多说,干活顶上。


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的方法使用

  • 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。此外,在服务器上还可以进一步实施安全措施。
异步处理

创建和更新通常非常消耗资源,有时会需要异步请求处理。

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

作者:吴家二少

博客地址:https://www.cnblogs.com/wu-kai/

本文欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接

 

最新文章

  1. 设计模式02迭代器(java)
  2. 工欲善其事必先利其器——dreamweaver
  3. Jacobian矩阵和Hessian矩阵
  4. php socket通信(tcp/udp)
  5. 20145218 《Java程序设计》第01次实验报告
  6. C# 仿制QQ弹出新闻消息框
  7. Poj 3239 Solution to the n Queens Puzzle
  8. 调试NodeJS应用
  9. 应付发票审批 Hold and Release Names
  10. HLG 2163 方格取数 (最大网络流)
  11. VC#2010 视图设计器无法打开 问题的正解
  12. SegmentFault错误汇总
  13. trueStudio笔记
  14. 路由器桥接尝试WDS
  15. [LintCode] Number of Islands(岛屿个数)
  16. awk中使用shell的环境变量
  17. SRM481
  18. Mybatis源码分析之SqlSessionFactory(一)
  19. POI导出EXCEL经典实现(转)
  20. tmpFile.renameTo(classFile) failed解决

热门文章

  1. 官网GitLab CI/CD英文文档翻译
  2. 敏捷史话(七):从程序员、作家到摇滚乐手——Andy Hunt的多面人生
  3. c# 打印面单
  4. Spring Boot和Thymeleaf整合,结合JPA实现分页效果
  5. centos7 SNMP错误记录
  6. WPF窗口和用户控件事件相互触发
  7. 剑指 Offer 40. 最小的k个数 + 优先队列 + 堆 + 快速排序
  8. 什么原因才是阻碍Linux桌面发展的罪魁祸首
  9. Java 常见对象 03
  10. Elasticsearch核心技术(一):Elasticsearch环境搭建