RESTful入門

weixin_34249678發表於2018-09-19

RESTful入門

1. REST簡介

和RPC一樣,都是目前比較主流的URL連結風格,也可以說是web服務的一種架構風格。REST全稱Representational State Transfer,表現層狀態轉移。用一句話簡單的概括就是URL定位資源,用HTTP動詞(GET,POST,DELETE,PUT)描述操作。其實它真正的全稱是Resource Representational State Transfer,看字面意思就是資源在網路中以某種表現形式進行狀態轉移。我們分開來解讀:

  • Resources:資源,即資料,比如friends,books等;
  • Representational :某種表現形式,比如用json,xml,jpg等;
  • State Transfer:狀態變化,通過HTTP動詞實現。

符合rest型別的結構就是Restful。

舉個簡單的例子:

非REST的url:http://...../queryItems.action?id=001&type=T01
REST的url風格:http://..../items/001

再比如:

http://api.qc.com/v1/newsfeed: 某人的新鮮事; 
http://api.qc.com/v1/friends: 某人的好友列表;
http://api.qc.com/v1/profile: 某人的詳細資訊;
然後用HTTP協議裡的動詞來實現資源的新增,修改,刪除等操作。即通過HTTP動詞來實現資源的狀態扭轉:
GET http://api.qc.com/v1/friends: 獲取某人的全部好友列表;
GET http://api.qc.com/v1/friends/{id}: 獲取某人的指定好友;
POST http://api.qc.com/v1/friends: 新增好友;
DELETE http://api.qc.com/v1/friends/{id}: 根據id刪除好友;
PUT http://api.qc.com/v1/friends/{id}: 根據id更新好友;
禁止使用類似這樣的URL:http://api.qc.com/v1/deleteFriend

2. 為什麼用Restful

為了通過統一的介面為web,Android,IOS提供服務,對於微博開放平臺,微信公共平臺等,他們不需要有顯式的前端,只需要一套提供服務的介面,也是Restful是它們最好的選擇。

3. 如何設計

3.1 URL使用名詞而不是動詞,且推薦用複數

在restful架構中,每個URL代表一種資源,所以網址中不能有動詞,只能有名詞。

反例:

/getBooks
/addBook
/updateBook
/deleteBook?id=10

正例:

GET /books
POST /books
PUT /books/{id}
DELETE /books/{id}

3.2 保證head和get方法是安全的

head和get方法不會對資源的狀態有所改變(汙染),比如嚴格杜絕如下情況:

GET /deleteBook?id=10

GET、HEAD和OPTIONS均被認為是安全的方法,而PUT、POST、DELETE等請求都是不安全的(會修改資料 )。

3.3 資源的地址推薦用巢狀結構

比如:

GET /books/1003/catalog

3.4 使用正確的HTTP Status Code表示訪問狀態

HTTP狀態可以參考:https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

3.5 使用HTTPS協議

API與使用者的通訊協議總是使用HTTPS協議。

3.6 專有域名

應該儘量將API部署在專用域名之下。

 https://api.example.com

如果確定API很簡單,不會有進一步擴充套件,可以考慮放在主域名下。

https://example.org/api/

參考:

http://www.ruanyifeng.com/blog/2014/05/restful_api.html

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

https://blog.csdn.net/chenxiaochan/article/details/73716617

https://www.zhihu.com/question/28557115?utm_source=wechat_search&utm_medium=organic

相關文章