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

  • 相关阅读:
    ti8168 eth0 启动
    MVC 5 Ajax + bootstrap+ handle bar 例: 实现service 状态
    MinGW 介绍
    VC POST表单——登录验证新浪邮箱
    关于ActionContext.getContext()的使用方法心得
    java对象数组
    播放音乐案例
    service
    监听短信(监听系统广播)
    普通广播接收者和有序广播接收者
  • 原文地址:https://www.cnblogs.com/Gift/p/10334168.html
Copyright © 2011-2022 走看看