zoukankan      html  css  js  c++  java
  • SOAP与REST API的区别

    之前一直想写些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/cloudman-open/

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

     

  • 相关阅读:
    AcWing 1135. 新年好 图论 枚举
    uva 10196 将军 模拟
    LeetCode 120. 三角形最小路径和 dp
    LeetCode 350. 两个数组的交集 II 哈希
    LeetCode 174. 地下城游戏 dp
    LeetCode 面试题 16.11.. 跳水板 模拟
    LeetCode 112. 路径总和 递归 树的遍历
    AcWing 1129. 热浪 spfa
    Thymeleaf Javascript 取值
    Thymeleaf Javascript 取值
  • 原文地址:https://www.cnblogs.com/cloudman-open/p/12274209.html
Copyright © 2011-2022 走看看