译-Web Service剖析: XML, SOAP 和WSDL 用于独立于平台的数据交换

本文是翻译内容,原文参见:

Anatomy of a Web Service: XML, SOAP and WSDL for Platform-independent Data Exchange

  Web Services Description Language,简称WSDL,又称为网络服务描述语言。WebService是一种跨编程语言和跨操作系统平台的远程调用技术

  大多数应用程序需要用户交互,用户通过界面输入数据,应用程序根据用户输入返回结果。Web service与此类似,只不过Web service是用于机器与机器,或者应用与应用之间通信的。通常没有直接的用户交互。Web service基本上是用于应用程序之间交换数据的开放协议的集合。采用开放的协议使得Web service是独立平台的。软件由不同程序语言编写,并运行在不同的系统平台上,这些软件都可以使用Web services通过网络来交换数据,比如Internet,Intranet。换句话说,Windows应用程序可以与PHP,Java和Perl等语言的应用程序进行通信,这在正常情况下是不可能的。

Web Service是如何工作的?

  由于不同的应用程序使用不同的程序语言编写,往往不能互相通信。 Web Service能够使用多种开放协议和标准满足这种通信需求,主要是XML,SOAP和WSDL。 Web Service使用XML来标记数据,通过SOAP传输message,最终以WSDL的方式描述服务的可用性。下面来看看Web Service应用程序的三个主要组成部分。

简单对象访问协议(SOAP)

  简单对象访问协议或SOAP是用于应用程序之间发送和接收消息的协议,它无需考虑不同平台的互操作性问题(互操作性意味着一个Web Service运行在什么平台上无关紧要)。具有类似功能的协议是HTTP,它被用于访问网页。 HTTP 协议不关心你所访问的网页搭建在Apache还是IIS上,也不关心网页是由ASP 还是HTML写的,只有符合HTTP协议,你都可以访问网页。因为SOAP既用于请求request又用于响应response,它的内容根据使用目的稍有不同。下面是SOAP请求和响应消息的一个例子:

SOAP Request: 

POST /InStock HTTP/1.1
Host: www.bookshop.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.bookshop.org/prices">
        <m:GetBookPrice>
            <m:BookName>The Fleamarket</m:BookName>
        </m:GetBookPrice>
    </soap:Body>
</soap:Envelope>

SOAP Response

POST /InStock HTTP/1.1
Host: www.bookshop.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.bookshop.org/prices">
        <m:GetBookPriceResponse>
            <m: Price="">10.95</m:>
        </m:GetBookPriceResponse>
    </soap:Body>
</soap:Envelope>

  上面这两个XML虽然看起来是一样的,但他们使用了不同的方法。例如通过上面的例子可以看到,请求消息使用GetBookPrice方法来获取图书价格。响应消息由getbookpriceResponse方法返回,响应消息可以被请求者看到。以上消息都由XML组成。

Web Services Description Language或者WSDL(网络服务描述语言)

你怎么知道Internet上提供的web Service都提供了什么方法?哈哈,这就是WSDL负责告诉你的。 WSDL是描述Web Service的文档,也告诉您如何访问和使用它的方法。来看看一个WSDL文件的样例:

<?xml version="1.0" encoding="utf-8"?>
<definitions name="DayOfWeek" targetNamespace="http://www.roguewave.com/soapworx/examples/DayOfWeek.wsdl" xmlns:tns="http://www.roguewave.com/soapworx/examples/DayOfWeek.wsdl" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/">
<message name="DayOfWeekInput">
    <part name="date" type="xsd:date" />
</message>
<message name="DayOfWeekResponse">
    <part name="dayOfWeek" type="xsd:string" />
</message>
<portType name="DayOfWeekPortType">
    <operation name="GetDayOfWeek">
        <input message="tns:DayOfWeekInput" />
        <output message="tns:DayOfWeekResponse" />
    </operation>
</portType>
<binding name="DayOfWeekBinding" type="tns:DayOfWeekPortType">
    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" />
    <operation name="GetDayOfWeek">
        <soap:operation soapAction="getdayofweek" />
        <input>
            <soap:body use="encoded" namespace="http://www.roguewave.com/soapworx/examples" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
        </input>
        <output>
            <soap:body use="encoded" namespace="http://www.roguewave.com/soapworx/examples" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
        </output>
    </operation>
</binding>
<service name="DayOfWeekService">
<documentation>Returns the day-of-week name for a given date 40</documentation>41
<port name="DayOfWeekPort" binding="tns:DayOfWeekBinding">42
<soap:address location="http://localhost:8090/dayofweek/DayOfWeek" />43</port>44</service>45</definitions>

WSDL文件主要提供的内容包括:

  • Web Service的描述
  • Web Service使用的方法和它需要的参数
  • 访问web Service的方法
上一篇:java8 去掉 perm 用 Metaspace 来替代


下一篇:1_mysql_认识