RESTFul 設計規範

Roy Thomas Fielding

REST這個詞,是Roy Thomas Fielding博士在他2000年提出的,有興趣的可以閱讀一下他的論文, 論文地址為:http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm。

目前主流的Web服務實現方案中,因為REST模式的Web服務與複雜的SOAP和XML-RPC相對比,更加簡潔,越來越多的Web服務開始採用REST風格設計和實現。例如Amazon.com提供接近REST風格的Web服務進行圖書查找;雅虎提供的Web服務也是REST風格的,簡單來說就是復用HTTP協議定義好的一組動詞。

RESTful的優點:

Advertisements

  • 不需要解釋即明白某個介面設計的意圖

  • 介面和資源一一對應,方便寫代碼

  • 方便做許可權控制

  • 為前端提供足夠的靈活性

  • 在API升級過程中URL的改動較少,減少版本管理的工作量

基本信息

Representational State Transfer,表現層狀態轉移,如果一個架構符合REST原則,就稱之為RESTful架構。

資源(Resource),網路上的一個實體,或者說是網路上的一個具體信息,URI就成了每一個資源的地址或獨一無二的識別符。

表現層(Representation),"資源"是一種信息實體,它可以有多種外在表現形式,"資源"具體呈現出來的形式,叫做它的"表現層"(Representation)。

狀態轉化(State Transfer),和伺服器互動,勢必涉及到數據和狀態的變化,互聯網通信協議HTTP協議,是一個無狀態協議。這意味著,所有的狀態都保存在伺服器端,客戶端用到的手段,只能是HTTP協議。具體來說,就是HTTP協議裡面,四個動詞:GET、POST、PUT、DELETE。它們分別對應四種基本操作:GET用來獲取資源,POST用來新建資源(也可以用於更新資源),PUT用來更新資源,DELETE用來刪除資源。

Advertisements

幾個需知點

1. REST是一種架構風格的指導規範,而不是技術實現

2. 網站即軟體,網站即服務

2.REST中信息的抽象即資源

3. 交互的對象——資源集合[名詞]

4. http verbs—>URIs—>entities

5. URL中不存在動詞,把動作省略,作為一種服務

6. 無狀態

7. http 四個動詞,GET獲取,POST新建,PUT更新(全部),DELETE刪除,PATCH更新(部分)

  • GET(SELECT):從伺服器取出資源(一項或多項)。

  • POST(CREATE):在伺服器新建一個資源。

  • PUT(UPDATE):在伺服器更新資源(客戶端提供改變后的完整資源)。

  • PATCH(UPDATE):在伺服器更新資源(客戶端提供改變的屬性)。

  • DELETE(DELETE):從伺服器刪除資源。

  • HEAD:獲取資源的元數據。

  • OPTIONS:獲取信息,關於資源的哪些屬性是客戶端可以改變的。

8. 數據格式JSON(推薦)

9. 安全性(修改數據的操作被認為是不安全的) 與 冪等性(GET, PUT,HEAD,DELETE),冪等性是指對同一資源的任意多次請求,語義相同

簡單實踐

根據id刪除、修改、查詢單個資源

eg:xxx/order/1 ( order即指那個單獨的資源 )

  • GET - 返回id是1的order

  • DELETE - 刪除id是1的order

  • PUT - 更新id是1的order,order的值從請求的內容體中獲取

獲取複數資源信息

eg: xxx/orders

  • GET - 返回所有orders

查詢複數資源

eg:xxx/orders?name=123

  • GET - 返回所有滿足查詢條件的order資源

創建多個資源

eg:xxx/orders

  • POST - 將返回所有創建成功的orders的id數組

刪除多個資源

eg:xxx/orders?id=[]

  • DELETE - 根據條件,批量刪除多個資源

修改多個資源

eg:xxx/orders?id=[]&params=[]

  • PUT - 根據id數組,批量更新多個資源的屬性

當然,目前而言rest風格的api才剛剛開始興起,在實際的設計場景中,還需要根據場景決定是否使用。其實沒有任何一種介面風格是所有開發者都推崇的,但還是建議多實踐,根據實際業務場景選擇即可。

參考文檔

http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm

https://martinfowler.com/articles/richardsonMaturityModel.html

http://blog.csdn.net/dm_vincent/article/details/51341037

http://www.ruanyifeng.com/blog/2011/09/restful.html

Advertisements

你可能會喜歡