解決方案
數千個系統想要在網際網路上暴露自身,但各自打造專屬的 RPC 協定,因此沒有用戶端能同時與其中兩個系統通訊。障礙不在於智力或頻寬,而在於為每個服務特製的介面。
Fielding 的博士論文指出,最低要求是一個統一介面:以 URI 識別資源、透過表示法操作資源、讓訊息自我描述,並以超媒體作為狀態引擎,這些都建立在既有的用戶端-伺服器、無狀態與快取約束之上。
由於 REST 重用了 HTTP 的通用動詞,而非發明新動詞,一個能抓取頁面的用戶端也能呼叫 API。這就是 REST 成為 Web API 預設方案、取代 RPC 與 CORBA 風格的原因。
它達成了什麼
將 HTTP 的動詞與資源位址重用為介面。
為何奏效
統一介面意味著一組通用用戶端與函式庫即可對所有 REST API 運作,大幅降低整合成本。
由於 REST 是約束而非定義,且建立在 HTTP 之上,因此部署時無需新協定或新技術堆疊。
無狀態加上快取,讓中介軟體能擴展請求,而伺服器在兩次呼叫之間無需知道呼叫者是誰。
以超媒體作為狀態引擎,讓用戶端能探索可用的操作,而不必對每個端點硬編碼。
可借鑑之處
從已通行於各處的事物衍生出的標準,會繼承其觸及範圍;有時最大的設計決策,是你拒絕加入的約束。
後續發展
Fielding 的博士論文於 2000 年發表,REST 成為公開與內部 Web API 的主流風格,取代 SOAP 風格的 RPC。它後來衍生出一些慣例(OpenAPI,以及往往未充分利用超媒體的「HTTP 上的 CRUD」解讀),也有人主張其最嚴格的超媒體形式鮮少被實作,但統一介面的理念勝出。
追溯依據
參考來源
- Representational State Transfer (REST), Fielding Dissertation Chapter 5 Roy T. Fielding / University of California, Irvine · ics.uci.edu
- Representational state transfer Wikipedia · en.wikipedia.org