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服務的描述,但不能給出一個「絕對全面和準確」的定義。受外部環境和實現技術影響,各方給出的核心定義可能稍有出入,但通常包括:
- 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 Studio、Eclipse等等整合開發環境(IDE)工具。使用者只需要專注於呼叫與實行。
Web服務的效能也時常是人們關注的一個問題。由於使用XML作為訊息格式,並以SOAP封裝,由HTTP傳輸,Web服務始終處於較高的開銷狀態。不過目前一些新興技術正在試圖解決此一問題,諸如新的XML處理模型致力於解決XML這一部分的效能。
類似方式
無論是在Web服務出現以前,還是現在,一直不斷有各種同類技術問世。比如,RMI作為這樣一種中介軟體系統就得到了廣泛部署。CORBA和DCOM則更加雄心壯志,兩者都嘗試將作用域波及到分散式對象,這一點也為Web服務所模仿。
這些類似方式往往藉助於XML-RPC和HTTP本身,而不依靠SOAP封裝參數。
參考文獻
外部連結
- W3C Web Services Activity home page (頁面存檔備份,存於網際網路檔案館)
- Web Services Architecture (頁面存檔備份,存於網際網路檔案館) (W3C Working Group Note)
- Secure, Reliable, Transacted Web Services (頁面存檔備份,存於網際網路檔案館)(IBM/Microsoft白皮書)
- XMethods - Collection of public Web Services你好