RESTFul 設計規範
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=[]¶ms=[]
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