先來點官方介紹,REST全稱是Representational State Transfer,中文意思是表述性狀態轉移,指的是一組架構約束條件和原則,REST架構風格並非綁定在HTTP上,只不過目前HTTP是惟一與REST相關的實例,而符合REST風格的架構,就能夠被成爲RESTful.html
恩,很正式,但是對於理解其真正的含義幫助不大,下面咱們來看看如何經過HTTP實現REST.api
有個好東西,流行了十幾年,忽然有一天,這東西的創造者跑出來講,大家怎麼瞎玩,這東西哪裏是這麼用的,因而:世界崩塌了~~~服務器
HTTP是互聯網使用最多的協議,但是他的創始人說,絕大多數使用者都誤解了HTTP的設計初衷,都在錯誤的使用HTTP.爲何這麼說呢,看下面的API格式對比restful
接口描述 | 傳統API---[錯誤用法] | RESTful API---[正確用法] |
新增用戶 | http://127.0.0.1/user/save POST架構 |
http://127.0.0.1/user POST 異步 |
刪除用戶 | http://127.0.0.1/user/delete GET/POST spa |
http://127.0.0.1/user DELETE .net |
修改用戶信息 | http://127.0.0.1/user/update POST設計 |
http://127.0.0.1/user PUT 3d |
根據ID獲取用戶信息 | http://127.0.0.1/user/query/1 GET |
http://127.0.0.1/user/1 GET |
經過上面的對比,咱們很容易發現如下問題:
1.URL的不一樣
URL的定義是統一資源定位符,從名字就能看出,URL的關注點是資源,因此它不該該包含動詞,在對比表中咱們能夠看見,傳統API的URL中包含了操做用戶的行爲(上例中的描述已經算是規整了,由於接口相對簡單,現實中每每存在着雜亂不堪的URL),而RESTful API則沒有,只是使用user來表述這是用戶信息資源
2.HTTP動詞使用
傳統API中,咱們只用到了GET和POST,但是HTTP動詞可不止兩個,大家覺得另外幾個是幹嗎用的?因此,正確使用HTTP動詞來描述API針對於資源所要進行的行爲,比較常見的是POST,DELETE,PUT,GET
上述表格右側已經給出了基本的RESTful API示例,下面咱們來更加全面的瞭解REST設計細節:
關於API版本號:
能夠放在URL中或者HTTP頭信息中,我的傾向前者,更直觀易懂
https://api.example.com/v1/
資源定位符:
URL中不能出現動詞,只能出現名詞,名詞建議採用複數形式
https://api.example.com/v1/users
HTTP動詞:
使用HTTP動詞來表示資源操做意圖
HTTP常見狀態碼:
使用HTTP狀態碼來反饋接口錯誤信息,不使用自定義返回信息(暫時沒能說服我,HTTP狀態碼沒法表達業務錯誤信息)
REST分級:
Level0:能夠簡單的理解成傳統HTTP API
Level1:和Level0的區別是它的關注點換成了資源
Level2:本真RESTful,絕大多數的RESTful就是作到這一層,URL來表示資源,動詞來表示行爲
Level3:完美RESTful,又叫HATEOAS,核心思想就是資源有本身的狀態,在不一樣的狀態下能執行的操做是不同的,即會在響應中加入相關的連接來引導客戶端用戶,而不須要查看文檔
總結:REST是一種規則約束,是一種風格,是一種思想,但不是一種規範,固然也就不存在徹底的RESTful,理解REST,能幫助咱們更合理,更正確的使用HTTP規範,而非像以往那樣只是用於傳輸.
參考資料地址:
http://www.ruanyifeng.com/blog/2014/05/restful_api.html
https://blog.csdn.net/qq_21383435/article/details/80032375
https://zhuanlan.zhihu.com/p/30396391?group_id=937244108725641216
https://blog.csdn.net/chenxiaochan/article/details/73716617