WEB服务
Web是基于HTTP协议的分布式架构。HTTP协议采用客户/服务器通信模式,该协议规定了服务器与浏览器之间交换数据的通信细节。
Web服务架构与Web一样,也是网络应用层的一种分布式架构,也是基于客户/服务器的通信模式,并且也能实现异构系统之间的痛惜。在Web服务架构中,服务器端负责提供Web服务,而客户端则请求访问Web服务。
那么,到底什么是Web服务呢?简单地理解,Web服务可看作是被客户端远程调用的各种方法,这些方法能处理特定业务逻辑或者进行复杂的运算等。下图演示了客户端请求访问服务器端的一个Web服务的过程。
SOAP协议
Web服务架构采用简单对像访问协议(Simple Object Access Protocol,SOAP)作为通信协议。SOAP规定客户与服务之间一律用XML语言进行通信。可扩展标记语言(Extensible Markup Language,XML)是一种可扩展的跨平台的标记语言。SOAP规定了客户端向服务器服务器端发送的Web服务请求的具体数据格式,以及服务器端向客户端发送的Web服务响应结果的具体数据格式。以及服务器端向客户端发送的Web服务响应结果的具体数据格式。假定服务器端哟一个Web服务(对应getTime()方法)能返回当前的系统时间,一个客户端请求访问这个Web服务,以下是服务端返回的Web服务响应结果:
<?xml version="1.0" encoding="UTF-8" ?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<getTimeResponse soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<getTimeReturn xsi:type="xsd:string">2008年01月26日 11:33</getTimeReturn>
</getTimeResponse>
</soapenv:Body>
</soapenv:Envelope>
以上XML数据的根元素为<soapenv:Envelope>,它的<soapenv:Body>子元素中包含了具体的Web服务响应正文。
要实现Web服务架构,就意味着必须创建基于SOAP,负责发布和调用Web服务,以及负责发送Web服务响应结果的服务器,还要创建基于SOAP的负责请求访问Web服务的客户程序。此外,要在全球范围内普及Web服务,则意味着要在internet上安装千千万万的能提供Web服务的服务器。如果这一切都从头开始,这将花费无数财力和人力,而且是个非常漫长的过程。幸运的是,当2000年Web服务的概念出现时,Web已经在Internet上非常普及了。Web服务搭乘Web这无处不在的顺风车,Web服务就轻而易举地在网络上流传开来了。
WEB服务执行流程
下图演示客户程序向一个Web服务查询当前系统时间为例,演示了Web服务搭乘Web顺风车地基本原理。
从上图可以看出,Web服务实际上是借助Web服务器来发布到网络上的。在Internet上,Web服务器已经无处不在,借用它来发布Web服务,就不必另起炉灶,创建专门的基于SOAP协议的服务器程序了。一下是客户程序访问特定Web服务来获取当前系统时间的过程:
- 客户程序发出一个原始请求,要求获取当前系统时间。
- 客户端协议解析器负责把客户程序的原始请求包装成一个XML格式的SOAP请求。SOAP请求是基于SOAP协议的Web服务请求的简称。
- 客户端协议连接器把SOAP请求包装成一个HTTP请求,其中SOAP请求变成了HTTP请求的正文部分。客户端协议连接器接着把HTTP请求发送给Web服务器。
- Web服务器接收到HTTP请求,取出HTTP请求的正文部分,即获得了SOAP请求。
- 服务器端协议解析器从SOAP请求中获取客户程序的原始请求数据,对其解析,然后调用Web服务。
- Web服务返回原始的响应结果,即当前系统时间。
- 服务器端协议解析器把Web服务返回的响应结果包装为SOAP响应结果。SOAP响应结果是基于SOAP协议的Web服务响应结果的简称。
- Web服务器把SOAP响应结果包装成一个HTTP响应结果,其中SOAP响应结果变成了HTTP响应结果的正文部分。Web服务器接着把HTTP响应结果发送给客户端协议连接器。
- 客户端协议解析器接收到HTTP响应结果,取出HTTP响应结果中的正文部分,即得到了SOAP响应结果。
- 客户端协议解析器从SOAP响应结果中得到Web服务的原始响应结果(当前时间),把它交给客户端。
“Web服务”与“Web”本来是两个不同的概念,由于Web服务可以借助Web来发布,使得他们变成毛与皮的关系。值得注意的是,Web服务的客户端程序不必是浏览器程序,对于任意一个已有的或者新建的软件系统,只要配置了与之兼容的客户端协议解析器以及客户端协议连接器组件,都可以作为Web服务的客户程序,访问Web上的Web服务。
WEB服务执行流程中的客户端协议解析器、客户端协议连接器组件,以及服务器端的协议解析器组件,都可以由专门的第三方软件厂商来提供。AXIS就是一个实现了这些组件的开放源代码软件,它相当于为发布Web服务提供了基本框架。