restful風格詳解
一.概念
RESTful架構,就是目前最流行的一種網際網路軟體架構。它結構清晰、符合標準、易於理解、擴充套件方便,所以正得到越來越多網站的採用。
REST這個詞,是Roy Thomas Fielding在他2000年的博士論文中提出的. Fielding將他對網際網路軟體的架構原則,定名為REST,即Representational State Transfer的縮寫。即"表現層狀態轉化"。如果一個架構符合REST原則,就稱它為RESTful架構。
二.理解
RESTful架構,Representational State Transfer
:表現層狀態轉化
1.資源(Resources): 每種資源對應一個特定的URI(統一資源定位符),URI為每一個資源的地址或獨一無二的識別符;
2.表現層(Representation):把"資源"具體呈現出來的形式,叫做它的"表現層",URI只代表"資源"的位置。它的具體表現形式,應該在HTTP請求的頭資訊中用Accept和Content-Type欄位指定,這兩個欄位才是對"表現層"的描述。
3.狀態轉化(State Transfer):客戶端想要操作伺服器,必須通過某種手段,讓伺服器端發生"狀態轉化"。而這種轉化是建立在表現層之上的,所以就是"表現層狀態轉化"。客戶端用到的手段就是HTTP協議裡面,四個表示操作方式的動詞:GET、POST、PUT、DELETE。它們分別對應四種基本操作:GET用來獲取資源,POST用來新建資源(也可以用於更新資源),PUT用來更新資源,DELETE用來刪除資源。
總結:
- 每一個URI代表一種資源;
- 客戶端和伺服器之間,傳遞這種資源的某種表現層;
- 客戶端通過四個HTTP動詞,對伺服器端資源進行操作,實現"表現層狀態轉化"。
三.HTTP動詞
對於資源的具體操作型別,由HTTP動詞表示。 常用的HTTP動詞有下面五個(括號裡是對應的SQL命令)。
GET(SELECT):從伺服器取出資源(一項或多項)。
POST(CREATE):在伺服器新建一個資源。
PUT(UPDATE):在伺服器更新資源(客戶端提供改變後的完整資源)。
PATCH(UPDATE):在伺服器更新資源(客戶端提供改變的屬性)。
DELETE(DELETE):從伺服器刪除資源。
還有兩個不常用的HTTP動詞。
HEAD:獲取資源的元資料。
OPTIONS:獲取資訊,關於資源的哪些屬性是客戶端可以改變的。
下面是一些例子。
GET /zoos:列出所有動物園
POST /zoos:新建一個動物園
GET /zoos/ID:獲取某個指定動物園的資訊
PUT /zoos/ID:更新某個指定動物園的資訊(提供該動物園的全部資訊)
PATCH /zoos/ID:更新某個指定動物園的資訊(提供該動物園的部分資訊)
DELETE /zoos/ID:刪除某個動物園
GET /zoos/ID/animals:列出某個指定動物園的所有動物
DELETE /zoos/ID/animals/ID:刪除某個指定動物園的指定動物
四.返回結果
針對不同操作,伺服器向用戶返回的結果應該符合以下規範。
GET /collection:返回資源物件的列表(陣列)
GET /collection/resource:返回單個資源物件
POST /collection:返回新生成的資源物件
PUT /collection/resource:返回完整的資源物件
PATCH /collection/resource:返回完整的資源物件
DELETE /collection/resource:返回一個空檔案
五.常見錯誤
1.URI包含動詞
POST /accounts/1/transfer/500/to/2
把動詞transfer改成名詞transaction
2.URI包含版本
www.example.com/app/1.0/foo
www.example.com/app/1.1/foo
www.example.com/app/2.0/foo
因為不同的版本,可以理解成同一種資源的不同表現形式,所以應該採用同一個URI。版本號可以在HTTP請求頭資訊的Accept欄位中進行區分.
Accept: vnd.example‐com.foo+json; version=1.0
Accept: vnd.example‐com.foo+json; version=1.1
Accept: vnd.example‐com.foo+json; version=2.0