RESTful入門

RESTful入門

1. REST簡介

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

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

符合rest類型的結構就是Restful。前端

舉個簡單的例子:web

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

再好比:json

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是它們最好的選擇。api

3. 如何設計

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

在restful架構中,每一個URL表明一種資源,因此網址中不能有動詞,只能有名詞。安全

反例:微信

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

正例:restful

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/...

### 3.5 使用HTTPS協議

API與用戶的通訊協議老是使用HTTPS協議。

3.6 專有域名

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

https://api.example.com

若是肯定API很簡單,不會有進一步擴展,能夠考慮放在主域名下。

https://example.org/api/
參考:

http://www.ruanyifeng.com/blo...

http://www.ruanyifeng.com/blo...

https://blog.csdn.net/chenxia...

https://www.zhihu.com/questio...

相關文章
相關標籤/搜索