Web服務

電子設備提供給另一電子設備的服務,通過萬維網相互通信

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,但也可能是SMTPXMPP
WSDL
一個XML格式文件,用以描述伺服器端口訪問方式和使用協定的細節。通常用來輔助生成伺服機和客戶端代碼及組態資訊。
UDDI
一個用來發佈和搜尋WEB服務的協定,應用程式可藉由此協定在設計或執行時找到目標WEB服務。

這些標準由這些組織制訂:W3C負責XML、SOAP及WSDL;OASIS負責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 StudioEclipse等等整合開發環境(IDE)工具。用戶只需要專注於呼叫與實行。

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

類似方式

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

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

參考文獻

外部連結

參見