REST
REST(Representational State Transfer),是 Roy Fielding 博士於 2000 年在他的博士論文《Architectural Styles and the Design of Network-based Software Architectures》中提出來的一種爲分佈式超媒體系統設計的軟件架構風格。REST 提出了一些設計概念和準則:
- 所有事物都被抽象爲資源(resource)
- 每個資源對應一個唯一的資源標識(resource identifier)
- 使用統一接口對資源進行操作
- 對資源的各種操作不會改變資源標識
- 所有操作無狀態
特徵
-
客戶端-服務器架構 -- Client–server architecture
提供服務的服務器和使用服務的客戶端需要被隔離對待。
-
無狀態 -- Stateless
服務器不在客戶端多個請求之間存儲共享的上下文信息,即客戶端發出的每個請求必須包含服務器處理該請求所需的全部信息。
-
可緩存 -- Cacheability
爲了提高網絡效率,響應應該可以被標示成可緩存的或是不可緩存的。
-
分層系統 -- Layered system
-
統一接口 -- Uniform interface
數據操作(CRUD:Create,Read,Update,Delete)分別對應於 HTTP 方法:POST,GET,PUT,DELETE。
-
按需編碼(可選) -- Code on demand (optional)
特點
- 基於 HTTP 協議,利用 HTTP 本身特徵,如 HTTP 動詞、狀態碼等
- 面向資源,通過 URI 暴露
- 對資源的獲取、創建、修改和刪除對應 HTTP 協議的
GET
、POST
、PUT
、DELETE
方法 - 連接無狀態
- 利用 Cache 機制提升性能
- 與傳統的 SOAP 和 XML-RPC 相比更加簡潔
設計準則
- 網絡上所有事物都被抽象爲資源(resource),資源是數據和表現形式的組合
- 每個資源對應一個唯一的資源標識符(resource identifier)
- 通過通用的連接器接口對資源進行操作(generic connector interface)
- 對資源的各種操作不會改變資源標識符
- 所有操作都是無狀態的(stateless)
RESTful
符合 REST 架構約束的 Web 服務 API 稱爲 RESTful API。
基於 HTTP 的 RESTful API 定義需要滿足以下要求:
- 一個基礎 URL,如
http://api.example.com/resources
- 定義狀態轉換數據元素的媒體類型