zoukankan      html  css  js  c++  java
  • SOAP和REST

    SOAP: Simple Object Access Protocol

    REST: Representation State Transfer

    SOAP的简单介绍

     SOAP可使用多种协议进行传输,用于解决RPC(Remote Procedure Call)

    当给http的header设置SOAPAction(它的值为server的url)时,就指定了这次请求为Soap 请求。request body是xml格式的。Envelope里面记录着要调用的方法名,如果该方法还有参数的话,还会有参数名和值。

    如下,一次请求和应答:

    POST /StockQuote HTTP/1.1
    Host: www.server.com
    Content-Type: text/xml; 
    charset="utf-8"
    Content-Length: 555
    SOAPAction: "Server-URI"
    
    <SOAP-ENV:Envelope
      xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
      SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">/**这两个命名空间是必须的*/

    <SOAP-ENV:Body>
    <m:GetLastTradePrice xmlns:m="Server-URI">   
      <symbol>DIS</symbol>
    </m:GetLastTradePrice>
     </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
    HTTP/1.1 200 OK
    Content-Type: text/xml; 
    charset="utf-8"
    Content-Length:555
    
    <SOAP-ENV:Envelope
      xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
      SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> /**这两个命名空间是必须的*/
       <SOAP-ENV:Body>
           <m:GetLastTradePriceResponse xmlns:m="Server-URI">
               <Price>34.5</Price>
           </m:GetLastTradePriceResponse>
       </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>

    SOAP协议可以简单地理解为:SOAP=RPC+HTTP+XML,即采用HTTP作为通信协议,RPC作为一致性的调用途径,XML作为数据传送的格式,从而允许服务提供者和服务客户经过防火墙在Internet上进行通信交互。

    WSDL(Web Service Description Language)用来描述哪个服务器提供什么服务,怎么找到它,以及该服务使用怎样的接口规范。

    使用Web Service的过程:获得该服务的WSDL描述,根据WSDL构造一条格式化的SOAP请求,发送给Web Service,然后接收一条同样的SOAP格式的应答,最后根据WSDL解码数据。

    SOAP每次请求web service用的都是HTTP的post方法。这一点使得SOAP在当下流行的分布式网络应用中的表现远远不如REST。
    SOAP还可以与其他传输协议搭配使用,TCP,UDP,SMTP,MIME都可以,这是他的优点

     REST的简单介绍

    相比SOAP, REST更轻量。web2.0的兴起,REST成为了流行架构风格。

    它是 ROA(Resource-Oriented Architecture)的。它把网络上所有的事物都抽象成资源(resource)。这个资源是数据和表现形式的组合。每个资源都有其对应的资源标识符URI(Uniform Resource Identifier),对资源的所有操作都被抽象成CRUD。

    用REST原则设计的软件、体系结构都很RESTful。

    REST的CRUD正好对应了HTTP的post/get/put/delete。这使得分布式服务应用中的代理服务器有了更大的用武之地。比如proxy server可以根据这次请求是GET 请求来做好缓存工作。还可以做权限过滤,比如哪些IP段的不可以做POST操作。这在SOAP里是完全不可能的,因为SOAP用的是HTTP的post,proxy server无法知道这是个查询,可以从缓存中取数据。如果SOAP要实现这些的话,还需要拆envelope以及知道真正的服务器端每个方法的用途,这样的耦合是完全不合理的。

    REST还可以使用为目前大多数浏览器支持的XMLHttpRequest对象,这为AJAX增色不少。

    REST 构建的系统其系统的扩展能力要强于 SOAP,这可以体现在它的统一接口抽象、代理服务器支持、缓存服务器支持等诸多方面。

    而SOAP的成熟性可以给需要提供给多开发语言的,多传输方式的,对于安全性要求较高的接口设计带来便利。

    还有好些特性不能完整的理解:

    REST的stateless

    SOPA怎么使用WS-Security, WS-Transactions,和WS-Coordination的,它是用这些来保持状态的吗?

    refer: https://juejin.im/post/5b8fd9b66fb9a05d0c37aa42

  • 相关阅读:
    LeetCode 515. 在每个树行中找最大值(Find Largest Value in Each Tree Row)
    LeetCode 114. 二叉树展开为链表(Flatten Binary Tree to Linked List)
    LeetCode 199. 二叉树的右视图(Binary Tree Right Side View)
    LeetCode 1022. 从根到叶的二进制数之和(Sum of Root To Leaf Binary Numbers)
    LeetCode 897. 递增顺序查找树(Increasing Order Search Tree)
    LeetCode 617. 合并二叉树(Merge Two Binary Trees)
    LeetCode 206. 反转链表(Reverse Linked List) 16
    LeetCode 104. 二叉树的最大深度(Maximum Depth of Binary Tree)
    LeetCode 110. 平衡二叉树(Balanced Binary Tree) 15
    LeetCode 108. 将有序数组转换为二叉搜索树(Convert Sorted Array to Binary Search Tree) 14
  • 原文地址:https://www.cnblogs.com/Gift/p/10334168.html
Copyright © 2011-2022 走看看