📜  SOAP 基础——简单对象访问协议(1)

📅  最后修改于: 2023-12-03 15:20:10.502000             🧑  作者: Mango

SOAP 基础——简单对象访问协议

SOAP (Simple Object Access Protocol) 是一种用于网络间通信的协议,它使用基于 XML 的消息格式并支持 HTTP,SMTP和其他协议。SOAP 的主要目的是为不同的应用程序提供标准化的接口,使得它们可以彼此通信,而不必考虑它们的语言和平台之间的差异。

SOAP 的组成部分

SOAP 协议由三个主要的组成部分组成:消息,RPC(Remote Procedure Call)绑定和传输协议绑定。

SOAP 消息

SOAP 消息是 Web Service 之间进行通信所使用的基本单元。它是一个 XML 文档,由以下三个部分组成:

  • Envelope:定义了该消息所属的命名空间(XML 中的 namespaces)以及包装其它两个部分(Header 和 Body)的 XML 元素。

  • Header:可选部分,允许在 SOAP 消息中添加一些元数据,如安全信息、事务管理等。

  • Body:包含了主体信息,在 Web Service 中通常是请求或响应的参数序列。

一个简单的 SOAP 消息示例:

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
  <soap:Header>
    <tns:auth xmlns:tns="http://example.com/auth">
      <tns:username>johndoe</tns:username>
      <tns:password>letmein</tns:password>
    </tns:auth>
  </soap:Header>
  <soap:Body>
    <tns:add xmlns:tns="http://example.com/calculator">
      <tns:num1>2</tns:num1>
      <tns:num2>3</tns:num2>
    </tns:add>
  </soap:Body>
</soap:Envelope>
RPC 绑定

RPC 绑定是一种简化了 SOAP 消息格式的协议。它允许使用像调用本地方法一样的方式调用远程服务,参数和返回值以方法参数的形式包含在 SOAP 消息的 Body 中。在 RPC 绑定中,消息的 Body 中的第一个 XML 元素必须是方法名。

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
  <soap:Body>
    <tns:add xmlns:tns="http://example.com/calculator">
      <tns:num1>2</tns:num1>
      <tns:num2>3</tns:num2>
    </tns:add>
  </soap:Body>
</soap:Envelope>

上面的示例中,<tns:add> 表示调用 add 方法,参数 23 将会作为 <tns:num1><tns:num2> 的值传递给远程服务端,服务端会将它们加起来并将结果返回。

传输协议绑定

SOAP 协议支持使用不同的传输协议进行通讯,如 HTTP 和 SMTP。在传输协议绑定中,SOAP 消息被嵌入在传输协议的消息体中,可以使用 SOAPAction HTTP 头部来标识 SOAP 操作或者使用 URN 方式命名 SOAP 操作。

SOAP 的优点和缺点
优点
  • 平台无关性:SOAP 使用 XML 来描述数据,使得其可以通过各种编程语言和平台来解析和使用。

  • 标准性:SOAP 是由 W3C 组织所制定,具有标准性,可以保证不同应用程序之间的交互是可靠的。

  • 稳定性:SOAP 使用标准的 HTTP 协议进行传输,因此具有稳定、可靠的传输特性。

缺点
  • 复杂性:SOAP 协议相对于其他的轻量级协议,如 REST 风格的 Web Service,较为复杂,使用起来比较麻烦。

  • 性能问题:由于 SOAP 使用 XML 作为消息格式,因此在数据量较大或者带宽较小的情况下,性能会受到影响。

  • 安全性问题:SOAP 并没有自带的安全机制,需要使用其他机制来确保数据的安全传输。

引用
  1. https://www.w3.org/TR/soap/
  2. http://www.ibm.com/developerworks/web/library/ws-soapintro/
  3. http://www.tutorialspoint.com/soap/index.htm