对于Web服务,XML是一个不可或缺的技术。在这当中SOAP(Simple Object Access Protocol)作为XML的应用规定吸引了广泛关注。本文将介绍SOAP是何物。
Web服务和SOAP
首先Web服务是什么呢?这里的[服务]指的是程序处理。通常的程序在得到输入后会进行处理并返回输出结果。同样的过程如果在Web上进行就是Web服务了。换句话说就是把Internet上传输的Message作为输入,进行处理后返回输出的过程。因此,Web服务不仅仅局限于我们日常使用的网站,而是也包括经由Web可以访问到的所有服务(程序)。为了实现Web服务的协同需要进行Message交换和远程程序调用,即基于XML进行的RPC(Remote Procedure Call)。这就是本文要介绍的SOAP(Simple Object Access Protocol)。
soap1_2
SOAP就是用于网络上应用之间(对象之间)情报交换的单纯的轻量级的式样。由DevelopMentor、IBM、Lotus、Microsoft、UserLand Software向W3C提案并以技术笔记的形式公开了式样( http://www.w3.org/TR/SOAP/)。该协议利用XML表示。
 
SOAP同现有技术的比较
到目前为止已经有几种Messaging和RPC的技术。比如分布式对象领域就有COM(Component Object Model)和CORBA(Common Object Request Broker Architecture)等RPC技术。这些技术都非常有用。既然如此,我们关注SOAP的理由何在呢?理由就是使用现有技术的应用是 封闭的,而是用SOAP的应用却是 开放的。
例如使用CORBA进行通信的话必须要有称为「IIOP」(Internet Inter-Orb Protocol)的特殊协议,同COM等其他技术之间无法实现通信。对于环境如此依赖,因此就被称为 封闭的应用。

对于这点,SOAP则是使用基于XML的通信,这样就可以利用现有的XML工具和环境。因此从基于XML开发的现有系统进行转变也很平稳。此外SOAP还有可以同其他各种协议绑定使用的优点。例如同HTTP(Hyper Text Transfer Protocol)、SMTP(Simple Mail Transfer Protocol)等标准的协议绑定使用就可以不限定通信对象并可以通过几乎所有的防火墙。这样SOAP就不依赖具体环境,开发 开放的系统也就成为可能。
soap1_1
SOAP的式样规定相关
在SOAP中规定了如下事项。
● Envelop的构成要素
├ Message构成
└ 处理式样
● Encoding规则
└ 数据序列化机制
● RPC行为规则
└ 请求和应答规则
Envelope的构成要素定义了三点:①Message有什么要素构成;②谁必须对哪个要素进行怎么样的处理;②这类的构成要素和处理是必须的还是可选的。这个部分就成为了SOAP Message总体构成的规定。
Encoding规则指的就是可以用来使用SOAP的Encoding规则,定义了用XML表示的数据结构。这些规则是基于W3C标准化的「XML Schema( http://www.w3.org/TR/xmlschema-0/)」制定的。
RPC行为规则是定义了使用SOAP的RPC请求和应答的行为规则。根据这个才有可能进行复杂数据结构的Message交换。RPC请求和应答在SOAP同HTTP绑定后表现为HTTP请求和HTTP应答。SOAP1.1式样书就以此为例公开了HTTP绑定。

但是SOAP的式样没有规定Transaction管理和安全管理,这些都取决于实际的应用。因此SOAP不是一个完全实现分布式对象的技术,而仅仅是用于Message交换和供RPC使用的。下面提供了一个SOAP请求的实例。这个实例是用于获取棒球比分。
<SOAP消息实例>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
  <SOAP-ENV:Header>
    <t:Transaction xmlns:t="http://baseball.azb.co.jp/Apache/" SOAP-ENV:mustUnderstand="1">
      5
    </t:Transaction>
  </SOAP-ENV:Header>
  <SOAP-ENV:Body>
    <m:getPitchingResult xmlns:m="http://baseball.azb.co.jp/Apache/DataStore/">
      <m:name>Akinobu Yoshida</m:name>
      <m:No>00</m:No>
    </m:getPitchingResult>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>
 
小结:
SOAP是同Web服务关联的基于XML的协议。灵活使用SOAP就可以实现服务间的消息交换和RPC。