和RPC同樣,都是目前比較主流的URL連接風格,也能夠說是web服務的一種架構風格。REST全稱Representational State Transfer,表現層狀態轉移。用一句話簡單的歸納就是URL定位資源,用HTTP動詞(GET,POST,DELETE,PUT)描述操做。其實它真正的全稱是Resource Representational State Transfer,看字面意思就是資源在網絡中以某種表現形式進行狀態轉移。咱們分開來解讀:html
符合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
爲了經過統一的接口爲web,Android,IOS提供服務,對於微博開放平臺,微信公共平臺等,他們不須要有顯式的前端,只須要一套提供服務的接口,也是Restful是它們最好的選擇。api
在restful架構中,每一個URL表明一種資源,因此網址中不能有動詞,只能有名詞。安全
反例:微信
/getBooks /addBook /updateBook /deleteBook?id=10
正例:restful
GET /books POST /books PUT /books/{id} DELETE /books/{id}
head和get方法不會對資源的狀態有所改變(污染),好比嚴格杜絕以下狀況:網絡
GET /deleteBook?id=10
GET、HEAD和OPTIONS均被認爲是安全的方法,而PUT、POST、DELETE等請求都是不安全的(會修改數據 )。架構
好比:
GET /books/1003/catalog
HTTP狀態能夠參考:https://www.w3.org/Protocols/...。
### 3.5 使用HTTPS協議
API與用戶的通訊協議老是使用HTTPS協議。
應該儘可能將API部署在專用域名之下。
https://api.example.com
若是肯定API很簡單,不會有進一步擴展,能夠考慮放在主域名下。
https://example.org/api/
參考:http://www.ruanyifeng.com/blo...
http://www.ruanyifeng.com/blo...