Leonard Richardson & Sam Ruby:Restful Web Services@2007
《RESTful Web Services》一書的核心論點圍繞著將 Web 的基礎架構原則應用於建構程式對程式的服務。這些論點與當時主流的 Web Service 模式形成鮮明對比。以下是本書的主要論點及其詳細解釋:
-
Web 本身是一個強大、簡潔且常被忽略的分散式應用程式平台
- 解釋: 作者認為,儘管 Web 技術(特別是 HTTP)可能從技術上看並非「令人驚嘆」或「最新最熱」,但其在過去十年中已經深刻地改變了人們的生活。更重要的是,Web 的底層技術(HTTP、URI 和 XML)為分散式程式設計提供了一個簡單、普遍且被低估的平台。Web 最初設計的目標非常簡單(例如 HTTP 0.9 只用於傳輸文件),而這種簡潔性恰恰是其擴展和成功的關鍵。HTTP 的核心設計決策,如可定址性 (Addressability)(每個資源都有唯一的 URI)和無狀態性 (Statelessness)(每個請求都包含完成所需的所有資訊,伺服器不記憶先前的客戶端狀態),使其具有出色的可擴展性和可靠性。作者主張,如果 Web 對人類使用者來說足夠好,那麼它也應該對程式(機器人)足夠好,只需要做一些調整以適應程式處理資料的方式(例如,使用結構化的 XML 而非為人類排版的 HTML)。
-
現今主流的「Web Services」(特別是基於 SOAP、WSDL 和 WS-* 標準的「大型 Web Services」)偏離了 Web 的核心原則,導致不必要的複雜性與問題。
- 解釋: 作者尖銳地批評了當時被稱為「Web Services」的主流技術棧。他們認為這些技術實際上與 Web 的精神背道而馳。這些服務通常採用重量級的分散式物件存取架構,類似於 COM 或 CORBA,並且重新發明或忽略了 Web 成功的許多關鍵特性。例如,它們經常將 HTTP 僅僅當作傳輸層,而將實際的方法呼叫和資料封裝在複雜的 XML 訊息(如 SOAP 信封)中。這種做法導致服務過於複雜、難以除錯,並且要求客戶端和服務端使用完全相同的軟體棧才能互通。這種不必要的複雜性不僅增加了開發和維護成本,也限制了服務的互通性、可擴展性和適應性。作者認為,這種方法未能利用 HTTP 本身提供的豐富語義和架構優勢。
-
REST (具象狀態傳輸) 是 Web 成功的基礎原則,但它是一種架構風格而非具體的實現架構。
- 解釋: 作者肯定了 Roy Fielding 在其博士論文中提出的 REST 架構風格,認為它精確地描述了 Web 成功背後的原則。然而,他們也指出,REST 是一種判斷架構優劣的標準或元架構,而不是一套可以直接用於設計和實現 Web Service 的具體步驟。這導致了對「RESTful」一詞的廣泛誤解和混淆,許多聲稱是 RESTful 的服務(被作者稱為「REST-RPC 混合式」)實際上並未完全遵循 REST 的原則,特別是在操作的統一性上。
-
作者提出「資源導向架構 (Resource-Oriented Architecture, ROA)」作為在 Web 上建構 RESTful Service 的具體實踐方法論。
- 解釋: 為了彌合 REST 理論與具體實踐之間的差距,作者提出了 ROA。ROA 是一套基於 REST 原則、針對 Web Service 設計的具體規則和最佳實踐。其核心在於將系統中的重要概念抽象為「資源」,並強調透過 HTTP 的標準方法(GET, POST, PUT, DELETE)和統一介面來操作這些資源。ROA 強調資源的可定址性(透過清晰的 URI 命名)、服務的無狀態性、資源之間的連結性(透過超媒體連結導航)以及統一介面的使用。本書的很大一部分致力於詳細解釋 ROA 的組成部分(資源、名稱/URI、具象、連結)和特性,並提供將需求轉化為 ROA 設計的具體步驟和範例。
-
遵循 ROA 原則設計的 Web Service 將更加簡潔、可擴展、易於使用並能更好地融入 Web 生態系統。
- 解釋: 作者認為,如果 Web Service 的設計能夠與 Web 的架構風格相符,它將自然地繼承 Web 的優勢。例如,利用 HTTP 的無狀態性可以簡化伺服器端邏輯並提高水平擴展的能力;利用 URI 的可定址性使得服務的各個部分易於引用和重用,促進服務的組合(Mashup);利用 HTTP 的統一介面降低了客戶端理解和使用服務的門檻,一個通用的客戶端可以與遵循統一介面的任何服務互動;透過超媒體連結提供的連結性使得客戶端可以像人類瀏覽網站一樣,透過導航來發現和使用服務的功能,減少對服務說明文件的硬編碼依賴。本書透過實際的客戶端和服務端範例(如 Amazon S3 的 RESTful 介面、重塑 del.icio.us API 等)展示了這些優勢。
-
最終目標是讓「程式 Web」與「人類 Web」融為一體,共享一個建立在統一原則上的互連網絡。
- 解釋: 作者期望的未來 Web 是一個統一的網絡,無論是供人類瀏覽的網站還是供程式消費的服務,都運行在同一組伺服器、使用同一組協定(HTTP、URI)並遵循同一組設計原則。他們認為,Web 的基礎技術(HTTP、URI、XML)已經足夠強大和靈活,可以作為分散式服務的預設平台。本書旨在提供必要的知識和詞彙,使開發者能夠設計和建構優雅、有效、並能積極參與整個 Web 生態系統的分散式應用程式。
總而言之,《RESTful Web Services》的核心論點在於倡導一種基於 Web 固有原則(REST)的程式對程式服務設計方法(ROA),藉此克服主流 Web Service 技術棧帶來的複雜性與限制,並最終實現程式 Web 與人類 Web 的融合,建構一個更為簡潔、健壯、可擴展且互聯互通的網絡。
comments
comments for this post are closed