zoukankan      html  css  js  c++  java
  • soap-学习

    1. SOAP 是一种简单的基于 XML 的协议,它使应用程序通过 HTTP 来交换信息。

      简单的说:SOAP是用于访问网络服务的协议。

    2. 什么是SOAP

    • SOAP 指简易对象访问协议
    • SOAP 是一种通信协议
    • SOAP 用于应用程序之间的通信
    • SOAP 是一种用于发送消息的格式
    • SOAP 被设计用来通过因特网进行通信
    • SOAP 独立于平台
    • SOAP 独立于语言
    • SOAP 基于 XML
    • SOAP 很简单并可扩展
    • SOAP 允许您绕过防火墙
    • SOAP 将被作为 W3C 标准来发展

    3. SOAP 构建模块

    一条 SOAP 消息就是一个普通的 XML 文档,包含下列元素:

    • 必需的 Envelope 元素,作用:把此 XML 文档标识为一条 SOAP 消息;SOAP消息的根元素;
    • 可选的 Header 元素,包含头部信息;包含有关 SOAP 消息的应用程序专用信息(比如认证、支付等)
      • 所有 Header 元素的直接子元素必须是合格的命名空间。
      • <?xml version="1.0"?>
        <soap:Envelope
        xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
        soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
        
        <soap:Header>
        <m:Trans
        xmlns:m="http://www.w3school.com.cn/transaction/"
        soap:mustUnderstand="1">234</m:Trans>
        </soap:Header>
        
        ...
        ...
        
        </soap:Envelope>

        在上例子中,包含了一个带有一个 "Trans" 元素的头部,它的值是 234,此元素的 "mustUnderstand" 属性的值是 "1"。

      • SOAP 在默认的命名空间中 ("http://www.w3.org/2001/12/soap-envelope") 定义了三个属性:
        •   actor:可被用于将 Header 元素寻址到一个特定的端点
          •   语法:soap:actor="URI" 
        •        mustUnderstand:用于标识   标题项     对于要对其进行处理的接收者来说是强制的(1)还是可选的(0);
          • "mustUnderstand="1"时,表示   处理此头部的接收者    必须认可此元素。假如此接收者无法认可此元素,则在处理此头部时必须失效。
        •        encodingStyle:用于定义在文档中使用的数据类型
        •   这些被定义在 SOAP 头部的属性可定义容器如何对 SOAP 消息进行处理。
    • 必需的 Body 元素,包含所有的调用和响应信息:包含打算传送到消息最终端点的实际 SOAP 消息。
      • SOAP Body 元素的直接子元素可以是合格的命名空间。SOAP 在默认的命名空间中("http://www.w3.org/2001/12/soap-envelope")定义了 Body 元素内部的一个元素。即 SOAP 的 Fault 元素,用于指示错误消息。
    • 可选的 Fault 元素,提供有关在处理此消息所发生错误的信息  
      •   它必须是 Body 元素的子元素。
      •         在一条 SOAP 消息中,Fault 元素只能出现一次。

      所有以上的元素均被声明于针对 SOAP 封装的默认命名空间中:

        http://www.w3.org/2001/12/soap-envelope

      以及针对 SOAP 编码和数据类型的默认命名空间:

        http://www.w3.org/2001/12/soap-encoding

    4.SOAP 语法规则

      这里是一些重要的语法规则:

    • SOAP 消息必须用 XML 来编码
    • SOAP 消息必须使用 SOAP Envelope 命名空间
    • SOAP 消息必须使用 SOAP Encoding 命名空间
    • SOAP 消息不能包含 DTD 引用
    • SOAP 消息不能包含 XML 处理指令

      SOAP消息的基本结构:<?xml version="1.0"?>

    <?xml version="1.0"?>
    <
    soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope"  //必须,把 XML 文档定义为 SOAP 消息
    soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">//必须,它可把封装定义为 SOAP 封装:
    //SOAP 的 encodingStyle 属性用于定义在文档中使用的数据类型;
    <soap:Header> ... ... </soap:Header> <soap:Body> ... ... <soap:Fault> ... ... </soap:Fault> </soap:Body> </soap:Envelope>

    5.  SOAP 方法指的是遵守 SOAP 编码规则的 HTTP 请求/响应。

      SOAP 请求可能是 HTTP POST 或 HTTP GET 请求。

      HTTP POST 请求规定至少两个 HTTP 头:Content-Type 和 Content-Length。

      举例:

      

    SOAP 请求

    POST /InStock HTTP/1.1
    Host: www.example.org
    Content-Type: application/soap+xml; charset=utf-8
    Content-Length: nnn
    
    <?xml version="1.0"?>
    <soap:Envelope
    xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
    soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
    
      <soap:Body xmlns:m="http://www.example.org/stock">
        <m:GetStockPrice>
          <m:StockName>IBM</m:StockName>
        </m:GetStockPrice>
      </soap:Body>
      
    </soap:Envelope>

    SOAP 响应:

    HTTP/1.1 200 OK
    Content-Type: application/soap+xml; charset=utf-8
    Content-Length: nnn
    
    <?xml version="1.0"?>
    <soap:Envelope
    xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
    soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
    
      <soap:Body xmlns:m="http://www.example.org/stock">
        <m:GetStockPriceResponse>
          <m:Price>34.5</m:Price>
        </m:GetStockPriceResponse>
      </soap:Body>
      
    </soap:Envelope>
  • 相关阅读:
    java 简单封装resultMap返回对象为map
    freemarker 遍历树形菜单
    python 正则表达式
    python BeautifulSoup基本用法
    sublime中正则替换
    媒体查询
    响应式网站的优点和缺点
    响应式网站概念
    vue系列之vue-resource
    vue系列之项目打包以及优化(最新版)
  • 原文地址:https://www.cnblogs.com/weiyouqing/p/10662357.html
Copyright © 2011-2022 走看看