REST 全名是
Representational State Transfer,中文翻譯成表現層狀態轉移。有些人還是搞不懂這個名詞在表達些什麼,主要是因為它省略了主詞,如果把主詞加進來可能比較容易懂。其實它的全名是 Resource
Representational State Transfer,簡單的講就是資源在網路中以某種形式進行狀態轉移。將它分開來解釋就是:
Resoure:資源,即資料。比如:一段文字
一首歌
一種服務。我們可以用一個 URI(統一資源定位符)來指向它,每種資源對應一個特定的 URI。我們要取得這個資源就必需透過 URI 來存取它,因此 URI 就成為每一個資源獨一無二的地址了。
Representational:資源是一種信息實體,它可以有多種表現形式,比如用
JSON,XML,JPGE ,我們把資源具體呈現出來的形式叫做它為”表現層(Representation) 。URI 只代表資源的實體,不代表它的形式。所以有些 URI 的最後字元有 ,html 是不必要的,應該在 http 的請求header 信息中用 Accept 和 content-Type 欄位指定,這二個欄位才是對”表現層”的描述。
State Transfer:訪問一個網站,就代表客戶端和服務端一個互動的過程, ,這個互動的過程勢必涉及到資料的狀態化。互聯網通信協議HTTP協議,是一個無狀態協議。這意味著,所有的狀態都保存在服務器端。因此,如果客戶端想要操作服務器,必須通過某種手段,讓服務器端發生"狀態轉化"(State
Transfer)。而這種轉化是建立在表現層之上的,所以就是"表現層狀態轉化"。狀態變化,通過 HTTP 動詞實現, 具體來說,就是HTTP協議裡面,四個表示操作方式的動詞:GET、POST、PUT、DELETE。它們分別對應四種基本操作:GET用來獲取資源,POST用來新建資源(也可以用於更新資源),PUT用來更新資源,DELETE用來刪除資源。。如果一個架構符合 REST 原則,就稱它為
RESTfull 架構
理解了 REST 代表的意義之後,我們要注意在實作上的一些規範,以符合 REST 的風格
1.資源是透過 URI 來表示
2.URI 使用名詞而不是動詞
BAD
/gerPerson
/listOrders
GOOD
- GET /products : will
return the list of all products
- POST /products : will add
a product to the collection
4. 不要在 URI 中加入版本號
http://www.example.com/app/1.0/foo
http://www.example.com/app/1.1/foo
因為不同的版本,可以理解成同一種資源的不同表現形式,所以應該採用同一個URI。版本號可以在HTTP請求頭信息的Accept字段中進行區分
Accept:
vnd.example-com.foo+json; version=1.0
Accept:
vnd.example-com.foo+json; version=1.1
Ref:http://www.ruanyifeng.com/blog/2011/09/restful.html
沒有留言:
張貼留言