SOAP 介绍

0x00

什么是SOAP?

SOAP(Simple Object Access Protocol )简单对象访问协议是在分散或分布式的环境中交换信息的简单的协议,是一个基于XML的协议.

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

SOAP是一个协议,与编程语言无关。实际上,许多语言已经开始支持SOAP,如:java,c/c++,vb,c#,perl,php.下面列出了在Java/C++/Perl/ADA/Python环境下SOAP的执行工具:

  • Java: Apache SOAP, DevelopMentor’s implementation, IdooXoap from ZVON
  • Python: PythonWare (client side only)
  • C++: IdooXoap from ZVON
  • Perl: SOAP::Lite

它包括四个部分:

  • SOAP封装(envelop),封装定义了一个描述消息中的内容是什么,是谁发送的,谁应当接受并处理它以及如何处理它们的框架。
  • SOAP编码规则(encoding rules),用于表示应用程序需要使用的数据类型的实例。
  • SOAP RPC表示(RPC representation),表示远程过程调用和应答的协定。
  • SOAP绑定(binding),使用底层协议交换信息。

虽然这四个部分都作为SOAP的一部分,作为一个整体定义的,但他们在功能上是相交的、彼此独立的。特别的,信封和编码规则是被定义在不同的XML命名空间(namespace)中,这样使得定义更加简单。

0X01

一个 SOAP 实例

在下面的例子中,一个 GetStockPrice 请求被发送到了服务器。此请求有一个 StockName 参数,而在响应中则会返回一个 Price 参数。此功能的命名空间被定义在此地址中: “http://www.example.org/stock

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>

0x02

SOAP=RPC+HTTP+XML

SOAP简单的理解,就是这样的一个开放协议SOAP=RPC+HTTP+XML:采用HTTP作为底层通讯协议;RPC作为一致性的调用途径,XML作为数据传送的格式,允许服务提供者和服务客户经过防火墙在INTERNET进行通讯交互。RPC的描叙可能不大准确,因为SOAP一开始构思就是要实现平台与环境的无关性和独立性,每一个通过网络的远程调用都可以通过SOAP封装起来,包括DCE(Distributed Computing Environment ) RPC CALLS,COM/DCOM CALLS, CORBA CALLS, JAVA CALLS,etc。

SOAP 使用 HTTP 传送 XML,尽管HTTP 不是有效率的通讯协议,而且 XML 还需要额外的文件解析(parse),两者使得交易的速度大大低于其它方案。但是XML 是一个开放、健全、有语义的讯息机制,而 HTTP 是一个广泛又能避免许多关于防火墙的问题,从而使SOAP得到了广泛的应用。但是如果效率对你来说很重要,那么你应该多考虑其它的方式,而不要用 SOAP。

为了更好的理解SOAP,HTTP,XML如何工作的,不妨先考虑一下COM/DCOM的运行机制,DCOM处理网络协议的低层次的细节问题,如PROXY/STUB间的通讯,生命周期的管理,对象的标识。在客户端与服务器端进行交互的时候,DCOM采用NDR(Network Data Representation)作为数据表示,它是低层次的与平台无关的数据表现形式。

参考:
http://www.ibm.com/developerworks/cn/xml/x-sisoap/
http://www.w3school.com.cn/soap/soap_example.asp

### 什么是 SOAP 协议SOAP(Simple Object Access Protocol,简单对象访问协议)是一种基于 XML 的通信协议,用于在网络上进行结构化信息的交换。它最初设计用于在分布式计算环境中实现应用程序之间的通信,支持跨平台和跨语言的数据交互。SOAP 协议本身是轻量级的,并不依赖于特定的传输协议,最常见的是使用 HTTP 作为其底层传输协议[^3]。 ### SOAP 的核心特性 - **基于 XML**:SOAP 使用 XML 来编码消息内容,这使得它具有良好的可读性和结构化特性,适用于多种数据格式的传输[^1]。 - **独立于平台和语言**:由于使用 XML 和 HTTP,SOAP 可以在不同的操作系统和编程语言之间无缝工作,具有高度的互操作性[^1]。 - **支持多种传输协议**:虽然最常与 HTTP 一起使用,但 SOAP 也可以绑定到 TCP、UDP 等其他协议上,提供更灵活的网络通信方式[^4]。 - **可扩展性强**:SOAP 的结构设计允许通过扩展机制支持额外的功能,例如安全性、事务处理等[^5]。 - **防火墙友好**:由于通常使用 HTTP 协议进行通信,SOAP 消息可以轻松绕过常见的防火墙限制,适用于企业内外网之间的通信。 ### SOAP 消息结构 SOAP 消息由以下几个主要部分组成: - **信封(Envelope)**:定义了整个 SOAP 消息的结构,是所有 SOAP 消息的根元素。 - **头部(Header)**:可选部分,用于携带与消息处理相关的额外信息,如身份验证、事务标识等。 - **主体(Body)**:包含实际的请求或响应数据,是消息的核心内容。 - **错误(Fault)**:用于在消息处理过程中发生错误时返回错误信息[^5]。 以下是一个简单的 SOAP 消息示例: ```xml <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"> <soap:Header> <!-- 可选的头部信息 --> </soap:Header> <soap:Body> <m:GetStockPrice xmlns:m="http://example.com/stock"> <m:StockName>ABC</m:StockName> </m:GetStockPrice> </soap:Body> </soap:Envelope> ``` ### 应用场景 SOAP 协议广泛应用于需要标准化接口和复杂交互的场景,例如: - **Web 服务(Web Services)**:SOAP 是构建基于 WSDL 和 UDDI 的 Web 服务的基础协议,广泛用于企业级服务集成。 - **企业内部系统集成**:多个异构系统之间通过 SOAP 接口进行数据同步、业务流程调用等。 - **金融、医疗等行业应用**:这些行业对数据格式和传输安全性要求较高,SOAP 提供了标准化和可扩展的通信机制。 - **远程过程调用(RPC)**:通过 HTTP 传输的 SOAP 消息可以实现跨网络的远程方法调用,类似于传统的 RPC 机制[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值