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，但也可能是 SMTP 或 XMPP。

**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 你好

## 參見

* SOAP
* WSDL
* UDDI
* WSCI
* BPEL4WS
* XML
* WCF