Web Service随笔1
2024-07-21 02:21:22
供稿:网友
web service随笔。
1 为什么出现web service?
现在internet的发展十分迅速,它从前的框架是“人来获取网络上的资源,比如:程序、文档等”。也就是说,现在的web是以人为中心的,人来发送各种请求。而它的发展趋势将是主体从“人”转向“程序”,比如媒体播放器、浏览器等,也就是说“以应用程序中心”的web。其实,在web service出现之前,人们就已经在做这方面的事情了,例如java的servlet和cgi,但是不同的程序系统采用了不同的数据定义,所以这些系统之间的交互变得异常地复杂。web service的出现,就是为了解决了不同应用程序之间通信的格式问题。
2 web service的通信方式?
xml通信有几种不同的方法,例如:xml remote procedure calls (xml-rpc),soap或http get/post。
3 web service的属性。
web service是在internet上任何可用的服务,它是通过标准化的xml通信(xml messaging)来实现的,并且不依赖于任何平台和任何编程语言。
尽管不是必须的,但web service可能会有其他两个属性:
a)可自描述的(self-describing).如果你编写web service,你应该发布web service的公共接口,至少有一个基于自然语言的文档。这样,别的开发者才能轻松地整合你的服务。
b)可发现的(discoverable).其他和你的web service有关的程序(可能是分散的,也可能是集中的系统)能够找到它。
4 web service 的架构
web service有两种架构,一种是讨论web service每个功能角色(role),另一种是讨论web service的协议层(protocol stack)。
就前者而言,web service有三个角色:服务提供者,服务请求者和服务注册机构。服务请求者从服务注册机构获得服务提供者,然后向服务提供者发出提供服务的请求。
就后者而言,web service有四层:服务传输层(service transport)、xml通信层(xml messaging)、服务描述层(service description)和服务发现层(service discovery)。
a) 服务传输层:负责信息在应用程序之间的传送。现在包括http、ftp、smtp和较新的如beep等协议。
就现在而言,由于http比较简单、稳定以及被广泛应用,而且大部分防火墙对http协议的80端口是开放的,所以http是服务运输层的最流行的协议。当然它会有一些安全上的隐患,因为http协议的设计并不能满足web service的安全性。
soap是不依赖于具体协议的,除了http协议,它还可以通过ftp、smtp等传输,比较有前途的是beep(blocks extensible exchange protocol)协议。beep协议属于tcp,它较http的优势在于:除了tcp公共的握手外,它每次所带的报文头只需30个字节。
b) xml通信层:负责用通用的xml格式对信息进行编码。现在包括xml-rpc和 soap.
c) 服务描述层:负责用wsdl将公共接口向特定的web service描述。
d) 服务发现层:负责将服务集中到公共注册机构,并且提供web service发布和寻找功能,现在服务发现是通过uddi来实现的(universal description, discovery, and integration
)。
可见,web service采用可类似网络分层的结构,使各个层次的功能互补干扰,同时又能很好的互相合作。当然,随着web service的不断发展,可能会出现新的层次。
我们可以看一下ibm的演示:
http://awwebx04.alphaworks.ibm.com/ettk/demos/wstkdoc/readme.htm
我到微软注册了uddi:http://uddi.microsoft.com
接下来看一下xml请求
下面是一段java的soap调用:
soap request:
<?xml version='1.0' encoding='utf-8'?>
<soap-env:envelope
xmlns:soap-env="http://www.w3.org/2001/09/soap-envelope/"
xmlns:xsi="http://www.w3.org/2001/xmlschema-instance"
xmlns:xsd="http://www.w3.org/2001/xmlschema">
<soap-env:body>
<ns1:getweather
xmlns:ns1="urn:examples:weatherservice"
soap-env:encodingstyle="http://www.w3.org/2001/09/soap-encoding/">
<zipcode xsi:type="xsd:string">10016</zipcode>
</ns1:getweather>
</soap-env:body>
</soap-env:envelope>
soap response:
<?xml version='1.0' encoding='utf-8'?>
<soap-env:envelope
xmlns:soap-env="http://www.w3.org/2001/09/soap-envelope/"
xmlns:xsi="http://www.w3.org/2001/xmlschema-instance"
xmlns:xsd="http://www.w3.org/2001/xmlschema">
<soap-env:body>
<ns1:getweatherresponse
xmlns:ns1="urn:examples:weatherservice"
soap-env:encodingstyle="http://www.w3.org/2001/09/soap-encoding/">
<return xsi:type="xsd:int">65</return>
</ns1:getweatherresponse>
</soap-env:body>
</soap-env:envelope>
而下面是.net调用的soap
soap request:
<?xml version="1.0" encoding="utf-8"?>
<soap:envelope xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xmlns:xsd="http://www.w3.org/2001/xmlschema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:body>
<add xmlns="http://tempuri.org/">
<a>24</a>
<b>12</b>
</add>
</soap:body>
</soap:envelope>
soap response:
<?xml version="1.0" encoding="utf-8"?>
<soap:envelope xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xmlns:xsd="http://www.w3.org/2001/xmlschema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:body>
<addresponse xmlns="http://tempuri.org/">
<addresult>36</addresult>
</addresponse>
</soap:body>
</soap:envelope>
可以看出xml通信的确是与平台、语言无关的一种方式。
wsdl:我认为说白了,就是一个应用程序的一个公共接口,回想我们调用一个web service的时候,我们事先知道它的方法、参数和返回值,但是具体如何实现,我们并不关心,这不就是我们通常所说的接口吗?
所以wsdl就是一种xml格式的web service提供的公共接口。
uddi:
uddi的数据有三种:
a) 白页。公司的基本信息
b) 黄页。服务的基本信息
c) 绿页。服务的技术信息,调用服务的地址。
4 什么是soap?
用w3c的话说,它什么也不是。它并没有被w3c正式承认。甚至连soap 1.1也只是note的地位,意思是现在它在被w3c成员讨论。
soap原意是简单对象进入协议(simple object access protocol),但是w3c对这个名字不太满意,因为这个解释没有表达清楚,但他们又不想换个名字,因为soap已经被开发者们熟悉并使用。所以,出现了奇怪的现象,soap的名字保留了,但是它并不代表任何东西。