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的名字保留了,但是它并不代表任何東西。