Representational State Transfer,簡稱 REST
它是一種網路架構風格,他並不是一種標準。

而 RESTful 可以這樣子想像:
美麗 (Beauty) 的事物可以稱為 Beautiful
設計為 REST 的系統就可以稱為 RESTful

以 API 而言,假設我們正在撰寫一組待辦事項的 API,
可能會有以下方式來作為 API 的 interface:

獲取使用者資料     /getAllUsers
獲取使用者資料     /getUser/1
新增使用者資料     /createUser
更新使用者資料     /updateUser/1
刪除使用者資料     /deleteUser/1

若是以 REST 風格來開發 RESTful API 的話:

獲取使用者資料     /GET            /users
獲取使用者資料     /GET            /user/1
新增使用者資料     /POST          /user
更新使用者資料     /PUT             /user/1
刪除使用者資料     /DELETE      /user/1

兩者差異是在於 RESTful API 充分地使用了 HTTP protocol (GET/POST/PUT/DELETE),
達到
1. 以直觀簡潔的資源 URI
2. 並且善用 HTTP Verb
3. 達到對資源的操作
4. 並使用 Web 所接受的資料類型: JSON, XML, YAML 等,最常見的是 JSON

通常是使用 HTTP, URI, JSON, HTML 這些現有廣泛流行的協議和標準,
且使用 HTTP status code 來代表該資源的狀態。

框架中強制使用 REST 風格的最有名的應該就是 Ruby on Rails 了!
(不過我們並不會使用 Rails 來開發 API service :P)

p.s. 因為 REST 並非是一種標準,因此有時候也不一定非得要照著 REST 來做,
只是在資源的操作面上,可以設計成這類的風格,以達到簡潔易懂,並且可重用。

下一篇會來聊聊 REST 的要求與優點