POST,PUT和PATCH的區別

1. GET方法用於獲取資源,不應有副作用,所以是冪等的。
  比如:GET http://www.bank.com/account/123456,不會改變資源的狀態,不論調用一次還是N次都沒有副作用。請注意,這裏強調的是一次和N次具有相同的副作用,而不是每次GET的結果相同。
  GET http://www.news.com/latest-news這個HTTP請求可能會每次得到不同的結果,但它本身並沒有產生任何副作用,因而是滿足冪等性的。
2. DELETE方法用於刪除資源,有副作用,但它應該滿足冪等性。
  比如:DELETE http://www.forum.com/article/4231,調用一次和N次對系統產生的副作用是相同的,即刪掉id爲4231的帖子;因此,調用者可以多次調用或刷新頁面而不必擔心引起錯誤。
3. POST和PUT的區別容易被簡單地誤認爲“POST表示創建資源,PUT表示更新資源.但實際上兩者都可以用來創建或是更新數據.單從技術上來說,他們並沒有什麼區別.但是在HTTP規範中POST是非等冪的,多次調用會產生不同的結果,
  比如:創建一個用戶,由於網絡原因或是其他原因多創建了幾次,那麼將會有多個用戶被創建.而PUT id/456則會創建一個id爲456的用戶,多次調用還是會創建的結果是一樣的,所以PUT是等冪的.
4. PATCH一般是用來局部更新資源的,假設我們有一個UserInfo,裏面有userId, userName, userGender等10個字段。可你的編輯功能因爲需求,在某個特別的頁面裏只能修改userName,這時候的更新怎麼做? 
  人們通常(爲徒省事)把一個包含了修改後userName的完整userInfo對象傳給後端,做完整更新。但仔細想想,這種做法感覺有點二,而且真心浪費帶寬(純技術上講,你不關心帶寬那是你土豪)。
  於是PATCH誕生,只傳一個userName到指定資源去,表示該請求是一個局部更新,後端僅更新接收到的字段。
  而PUT雖然也是更新資源,但要求前端提供的一定是一個完整的資源對象,理論上說,如果你用了PUT,但卻沒有提供完整的UserInfo,那麼缺了的那些字段應該被清空.另外PUT會有一個create操作,加入更新的id不存在,會進行創建,而PATCH則沒有這個.
參考鏈接:https://www.jianshu.com/p/bee85cf4e33a

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章