天天看點

我也來談web service

最近在準備web service的一次講課。是軟體體系結構的一個章節。下面把我所領悟的東西做一個總結。希望朋友們能來一起探讨研究下。

----

1. web service是什麼?

在說這個問題之前,我想首先要統一兩個概念programmable web和human web。

human web可能是很多人對web的了解。做一個web項目就是為了讓人來使用的,web應用裡面的内容暫且放一邊,對于結果的渲染就是傳回html代碼。

那麼programmable web,顧名思義,就是在程式設計中可識别的web,換句話說,就是web對外的接口不是html代碼,而是另一種計算機可識别的代碼譬如XML。

那麼它們是不是應該合二為一呢,對于一個web應用來說,無論是programmable web還是human web,隻是觀察的角度不同,接口不同,那麼,最好的做法是将它們統一起來,如果是程式設計需要就給它傳回XML代碼,如果是浏覽需要就傳回html,當然還可能傳回其他格式的内容(譬如RSS),那麼如此的統一,統一點在哪呢?也就是說從什麼角度看它們就是統一的呢?web service,既然是服務,就要服務的全面,到位,既然服務于人,又要服務于機器。

說清楚了這兩個概念,那麼來看看web service的定義:

引用W3C定義:

[Definition: A Web service is a software system designed to support interoperable machine-to-machine interaction over a network. It has an interface described in a machine-processable format (specifically WSDL). Other systems interact with the Web service in a manner prescribed by its description using SOAP messages, typically conveyed using HTTP with an XML serialization in conjunction with other Web-related standards.]

在前面一篇文章中,我翻譯過這段話,這段話表達了3個意思:

1. web服務是用來支援機器對機器之間通過網絡進行互操作的軟體系統

2. web服務的接口描述是有機器能夠讀懂的格式(WSDL:web service description language)

3. 在其他系統跟web服務互動時,這些系統要遵循web服務的接口描述來組織SOAP消息。通常情況下使用HTTP來傳遞XML格式的内容與其他的web相關标準相關聯。

3. web service的邏輯分層:

從圖中可以看到,web service分為了5層,分别是資料層、資料通路層、業務邏輯層、業務面和監聽者,它們的功能在左邊有相應的說明。

我覺得如此分層與MVC架構的建立有密切的聯系,因為架構限制底層實作。

從上往下來看,對應的事件相當于外界(使用者)對web發出request,需要web傳回response

監聽者,是與外界(使用者)離的最近的一層,這一層實作從外部使用者得到所有請求需要的内容(譬如方法,參數等)。這一層也就相當于V

業務層, 将監聽者得到的請求内容進行第一層加工。但是不進行具體的業務邏輯處理。相當于C

資料通路層,業務邏輯層這二層,用來将實體資料轉換為邏輯資料。這也就相當于是M的功能。

資料層對應着資料庫,這一層存放實體資料。

------------

4. 從web service分類描述中尋求共性。

    角度不同,web service的分類也就不同,下面我摘抄一些對于web分類的說法:

 從功能的角度描述Web 服務,有一種觀點認為Web 服務基于TCP/IP,HTTP,XML 等規範而定義,具備如下功能:Web 上連結文檔的浏覽、事務的自動調用、服務的動态發現和釋出.

從組成架構及實作目标的角度描述Web 服務,認為Web 服務作為一種網絡操作,能夠利用标準的Web 協定及接口進行應用間的互動.還有從語義的角度描述了基于語義Web 的服務,認為Web 服務是語義Web 的一種應用,由于考慮了語義資訊的描述及表示,Web 服務能夠更準确地被執行,服務組合(service composition)能夠按所期望的目标進行.

還有從網格計算(grid computing)的角度、資訊檢索的角度提出了很多web服務的描述。

另外一方面,針對不同的應用背景: 面向企業應用(business-oriented) 的服務、面向消費者(consumer-oriented) 的服務、面向裝置(device-oriented)的服務和面向系統(system-oriented)的服務

但共性是:

(1) 應用的分布式.為适應網絡應用中分布式的資料源和服務提供者,分布式的服務響應、松散耦合是Web 服務必須具備的特征.在應用中,服務請求者不必關心服務提供者的資料源格式是什麼,某一服務請求需調用哪些服務,服務請求在Web 上怎樣被執行等,即Web 服務對使用者具有分布透明性. 

(2) 應用到應用的互動.在分布式的環境中,若采用集中控制方式,伺服器有較大的負荷,并且系統不具有健壯性.是以應用到應用的互動,使得Web 服務更具可伸縮性. 

(3) 平台無關性.Web 服務的界面、跨Web 服務的事務、工作流、消息認證、安全機制均采用規範的協定和約定;由于Web 服務采用簡單、易了解的标準

Web 協定作為元件接口和協同描述的規範,完全屏蔽了不同軟體平台的差異,是以具有可內建能力。

5. web服務的特點

對于外部使用者來說,web service是一個對象/元件。

它有5個特點

1. 完好的封裝性:服務既然是一種部署在Web上的對象,自然具備對象的良好封裝性,對于使用者而言,他能且僅能看到該對象提供的功能清單。    

2. 松散耦合:這一特征也是源于對象元件技術,當一個Web服務的實作發生變更的時候,調用者是不會感到這一點的,對于調用者來說,隻要服務的調用界面不變,服務的實作任何變更對他們來說都是透明的。    

3. 使用協約的規範性:這一特征從對象而來,但相比一般對象其界面規範更加規範化和易于機器了解。    

4. 使用标準協定規範:作為Web服務,其所有公共的協約完全需要使用開放的标準協定進行描述、傳輸和交換。這些标準協定具有完全免費的規範,以便由任意方進行實作。    

5. 高度可內建能力:由于服務采取簡單的、易了解的标準協定作為元件界面描述和協同描述規範,完全屏蔽了不同軟體平台的差異,無論是CORBA、 DCOM還是EJB都可以通過這一種标準的協定進行互操作,實作了在目前環境下最高的可內建性。

這些特點比較明顯,就不再進行講述了。

6. web服務的模型:

可以看到這裡有3個角色,3個動作,3個雙向箭頭,首先解釋一下3個角色

服務提供者,也就是我們建構的web服務,可以對外提供某種服務,它首先要通過釋出(可選)到服務代理,然後被服務請求者查找到,服務請求者從服務代理得到服務提供者的資訊之後,和服務提供者綁定,從服務提供者那裡得到需要的服務。

7. web服務開發的生命周期

     這個生命周期類似于軟體開發的生命周期, 因為web開發也是一種軟體開發的過程。

8.web服務概念性協定棧

發現服務層:是幫助用戶端應用解析遠端服務的位置,通過UDDI實作。

描述服務層:為用戶端提供服務端的服務描述,例如web服務能做什麼,位置在哪,如何調用等

消息格式層:保證用戶端與服務端格式設定上保持一緻,一般通過SOAP來實作。SOAP定義了C與S之間消息傳輸規範。SOAP用XML來格式化消息,HTTP來承載。SOAP包括3個部分,SOAP信封(定義了描述資訊和如何處理消息的架構的封裝)、表達應用程式定義的資料類型執行個體的編碼規則(SOAP編碼規則)以及RPC協定

編碼格式層:為C和S之間提供标準的,獨立于平台的資料交換編碼格式,一般為XML格式。

傳輸協定層:為C與S之間提供互動的網絡通信協定

-----未完待續

本文轉自 fsjoy1983 51CTO部落格,原文連結:http://blog.51cto.com/fsjoy/120877,如需轉載請自行聯系原作者