Web服務

Webservices.png

Web服務是一種服務導向架構的技術,透過標準的Web協議提供服務,目的是保證不同平台的應用服務可以互操作。

根據W3C的定義,Web服務(Web service)應當是一個軟體系統,用以支持網絡間不同機器的互動操作。網絡服務通常是許多應用程式接口(API)所組成的,它們透過網絡,例如國際網際網路(Internet)的遠程伺服機端,執行客戶所提交服務的請求。

儘管W3C的定義涵蓋諸多相異且無法介分的系統,不過通常我們指有關於主從式架構(Client-server)之間根據SOAP協議進行傳遞XML格式消息。無論定義還是實現,WEB服務過程中會由伺服機提供一個機器可讀的描述(通常基於WSDL)以辨識伺服機所提供的WEB服務。另外,雖然WSDL不是SOAP服務端點的必要條件,但目前基於Java的主流WEB服務開發框架往往需要WSDL實現客戶端的原始碼生成。一些工業標準化組織,比如WS-I,就在WEB服務定義中強制包含SOAP和WSDL。

定義

核心定義

考慮到並沒某個獨立文檔包含一切相關內容,可採用模塊化的方式給出對WEB服務的描述,但不能給出一個「絕對全面和準確」的定義。受外部環境和實現技術影響,各方給出的核心定義可能稍有出入,但通常包括:

SOAP
一個基於XML的可擴展消息信封格式,需同時綁定一個網絡傳輸協議。這個協議通常是HTTP或HTTPS,但也可能是SMTP或XMPP
WSDL
一個XML格式文檔,用以描述服務埠訪問方式和使用協議的細節。通常用來輔助生成伺服機和客戶端代碼及配置信息。
UDDI
一個用來發布和搜索WEB服務的協議,應用程式可藉由此協議在設計或運行時找到目標WEB服務。

這些標準由這些組織制訂:W3C負責XML、SOAP及WSDL;OASIS英語OASIS (organization)負責UDDI。

協議集

為提高WEB服務間的互操作能力,WS-I還特別發布了WEB服務協議集(Profile)。協議集包含了一系列特定版本的核心定義(諸如SOAP和WSDL),以及對其使用上的限制與約束。WS-I還發布了用於部署協議集兼容WEB服務的測試工具及相關用例。

WS-系列追加定義

為擴展WEB服務能力,一些新的標準已經或正在被開發。這些標準通常被冠以WS字頭(Web Service的簡稱),以下是一個WS系列追加標準的不完全列表:

WS安全(WS-Security)
定義了如何在SOAP中使用XML加密或XML簽名來保護消息傳遞。可作為HTTPS保護的一種替代或擴充。
WS信賴性(WS-Reliability)
一個來自OASIS的標準協議,用來提供可信賴的WEB服務間消息傳遞。
WS可信賴消息(WS-ReliableMessaging)
同樣是一個提供信賴消息的協議,由Microsoft, BEA 和IBM發布。目前OASIS正對其實施標準化工作。
WS尋址(WS-Addressing)
定義了在SOAP消息內描述發送/接收方地址的方式。
WS事務(WS-Transaction)
定義事務處理方式。

一直以來,W3C負責制定了不少WS追加定義,但近來此舉開始受到懷疑。一些人呼籲W3C作為網絡和語義網構建者應當把精力放在核心網絡本身,而不是為WEB服務改換版本。特別是2007年2月的企業級WEB服務論壇上,對W3C不再充當WEB服務定義者的訴求開始表面化。 此外,OASIS對WEB服務擴展實施了許多標準化工作。包括WEB服務資源框架以及WSDM。

使用WEB服務的方式

WEB服務實際上是一組工具,並有多種不同的方法呼叫之。三種最普遍的手段是:遠端程序呼叫(RPC),服務導向架構(SOA)以及表述性狀態轉移(REST)。

遠端程序呼叫

WEB服務提供一個分布式函數方法接口供用戶呼叫,這是一種比較傳統的方式。通常,在WSDL中對RPC接口進行定義(類似於早期的XML-RPC)。

儘管最初的WEB服務廣泛採用RPC方式部署,但針對其過於緊密之耦合性的批評聲也隨之不斷。這是因為RPC式WEB服務實質上是利用一個簡單的映射,以把用戶請求直接轉化成為一個特定語言編寫的函數或方法。如今,多數服務提供商認定此種方式在未來將難有作為,在他們的推動下,WS-I基本協議集(WS-I Basic Profile)已不再支持遠端程序呼叫。

服務導向架構

現在,業界比較關注的是遵從服務導向架構(Service-oriented architecture,SOA)概念來構築WEB服務。在服務導向架構中,通訊由消息驅動,而不再是某個動作(方法呼叫)。這種WEB服務也被稱作面向消息的服務。

SOA式WEB服務得到了大部分主要軟體供應商以及業界專家的支持和肯定。作為與RPC方式的最大差別,SOA方式更加關注如何去連接服務而不是去特定某個實現的細節。WSDL定義了聯絡服務的必要內容。

表述性狀態轉移

表述性狀態轉移式(Representational state transfer,REST)WEB服務類似於HTTP或其他類似協議,它們把接口限定在一組廣為人知的標準動作中(比如HTTP的GET、PUT、DELETE)以供呼叫。此類WEB服務關注與那些穩定的資源的互動,而不是消息或動作。

此種服務可以透過WSDL來描述SOAP消息內容,透過HTTP限定動作接口;或者完全在SOAP中對動作進行抽象。

批評

一些人抱怨,WEB服務(具象化狀態轉移式除外)過於複雜,認為它太過於偏重那些大型軟體開發商,而不利於開源項目。但是至今不少開發工具已經具備自動化產生具象物件,已經減少web服務的呼叫難度。例如Microsoft visual studio、eclipse 等等IDE工具。使用者只需要專注於呼叫與實行。


WEB服務的性能也時常是人們關注的一個問題。由於使用XML作為消息格式,並以SOAP封裝,由HTTP傳輸,WEB服務始終處於較高的開銷狀態。不過目前一些新興技術正在試圖解決此一問題,諸如新的XML處理模型致力於解決XML這一部分的性能。

類似方式

無論是在WEB服務出現以前,還是現在,一直不斷有各種同類技術問世。比如,RMI作為這樣一種中間件系統就得到了廣泛部署。CORBA和DCOM則更加雄心壯志,兩者都嘗試將作用域波及到分布式對象,這一點也為WEB服務所模仿。

這些類似方式往往藉助於XML-RPC和HTTP本身,而不依靠SOAP封裝參數。

外部連結

參見