1. 程式人生 > 程式設計 >restful風格詳解

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請求的頭資訊中用AcceptContent-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

參考連結:
RESTful API 設計指南
restful風格詳解