好處是,操作系統或者瀏覽器,可以重復利用它們內置的緩存機制等等。
增刪改查都是一個地址,具體靠http頭部信息判斷。
利用HTTP協議語義構建的語義化、可緩存的接口。
URL定位資源,用HTTP動詞(GET,POST,DELETE,DETC)描述操作。
-----------------------------------------------------------------------------------------------
首先,之所以晦澀是因為前面主語被去掉了,全稱是 Resource Representational State Transfer:通俗來講就是:資源在網絡中以某種表現形式進行狀態轉移。分解開來:
Resource:資源,即數據(前面說過網絡的核心)。比如 newsfeed,friends等;
Representational:某種表現形式,比如用JSON,XML,JPEG等;
State Transfer:狀態變化。通過HTTP動詞實現。
作者:覃超
鏈接:https://www.zhihu.com/question/27785028/answer/48096396
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
-----------------------------------------------------------------------------------------------
鏈接:https://www.zhihu.com/question/28557115/answer/47846156
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
1、REST 是面向資源的,這個概念非常重要,而資源是通過 URI 進行暴露。
URI 的設計只要負責把資源通過合理方式暴露出來就可以了。對資源的操作與它無關,操作是通過 HTTP動詞來體現,所以REST 通過 URI 暴露資源時,會強調不要在 URI 中出現動詞。
GET /rest/api/getDogs --> GET /rest/api/dogs 獲取所有小狗狗
GET /rest/api/addDogs --> POST /rest/api/dogs 添加一個小狗狗
GET /rest/api/editDogs/:dog_id --> PUT /rest/api/dogs/:dog_id 修改一個小狗狗
GET /rest/api/deleteDogs/:dog_id --> DELETE /rest/api/dogs/:dog_id 刪除一個小狗狗
左邊的這種設計,很明顯不符合REST風格,上面已經說了,URI 只負責准確無誤的暴露資源,而 getDogs/addDogs...已經包含了對資源的操作,這是不對的。相反右邊卻滿足了,它的操作是使用標准的HTTP動詞來體現。
2、REST很好地利用了HTTP本身就有的一些特征,如HTTP動詞、HTTP狀態碼、HTTP報頭等等
REST API 是基於 HTTP的,所以你的API應該去使用 HTTP的一些標准。這樣所有的HTTP客戶端(如瀏覽器)才能夠直接理解你的API(當然還有其他好處,如利於緩存等等)。REST 實際上也非常強調應該利用好 HTTP本來就有的特征,而不是只把 HTTP當成一個傳輸層這么簡單了。
GET 獲取一個資源
POST 添加一個資源
PUT 修改一個資源
DELETE 刪除一個資源
實際上,這四個動詞實際上就對應着增刪改查四個操作,這就利用了HTTP動詞來表示對資源的操作。
HTTP狀態碼200 OK
400 Bad Request
500 Internal Server Error
- 所有事情都按預期正確執行完畢 - 成功
- APP 發生了一些錯誤 – 客戶端錯誤
- API 發生了一些錯誤 – 服務器端錯誤
這三種狀態與上面的狀態碼是一一對應的。
HTTP報頭Authorization 認證報頭
Cache-Control 緩存報頭
Cnotent-Type 消息體類型報頭
......
報頭還有很多,不一一列舉。HTTP報頭是描述HTTP請求或響應的元數據,它的作用是客戶端 與 服務器端進行相互通信時,告訴對方應該如何處理本次請求。
-----------------------------------------------------------------------------------------------
rest協議是面向資源的
假如要管理一些用戶,那么將用戶看作是一種資源:
get /users/{userId} 獲取userId對應的user信息
post /users 創建一個新的user
put /users/{userId} 更改userId對應的user信息
delete /users/{userId} 刪除userId對應的user。
soap是面向服務的
還是管理用戶,將對用戶的操作看成服務:
post /users/getUser
post /users/creatUser
post /users/updateUser
post /users/deleteUser
作者:yuankai deng
鏈接:https://www.zhihu.com/question/28557115/answer/41267646
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
-----------------------------------------------------------------------------------------------
鏈接:https://www.zhihu.com/question/27785028/answer/118036452
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
參看一個例子吧:GitHub - hot13399/spring-mvc-REST
- GET
http://localhost:8080/spring-mvc-REST/students
- GET
http://localhost:8080/spring-mvc-REST/students/1
- POST 以下JSON內容
{"id":0,"firstName":"Wang","lastName":"Di","gender":"M","birthday":538300800000,"uscId":"1234509876","gpa":3.62,"mentorId":null,"department":"Computer Science"}
http://localhost:8080/spring-mvc-REST/student
- PATCH以下內容
{"gpa":3.62}
http://localhost:8080/spring-mvc-REST/students/1
- PUT以下內容(Full Content)
{"firstName":"Wang","lastName":"Di","gender":"M","birthday":538300800000,"uscId":"1234509876","gpa":3.62,"mentorId":null,"department":"Computer Science"}
http://localhost:8080/spring-mvc-REST/students/1
- DELETE
http://localhost:8080/spring-mvc-REST/students/1