文件參考MDN
在這之前,先說明idempotent(冪等)
冪等簡言之就是不管運算幾次,結果都相等,例如0和1就是乘法計算下為二的冪等實數。回到前端,冪等表示該方法執行一次和執行多次,都會有相同的效果,且有同樣的server state (參見MDN-idempotent)
何謂Safe http request method?
不會改變server state的方法,便屬於safe的類型
safe歸safe,idempotent歸idempotent;但safe的一定idempotent
not safe不嚴重,就只是method特性分類罷了...
GET
只限用於從特定資源發出請求以取得data
request無body,成功的response帶有body
可被cached,會被記錄在瀏覽器history(別用來get機密/敏感資料)
Safe、Idempotent
POST
與POST反過來,發data給特定資源
似乎不可cached..( Ovo )
request、successful response均帶有body
not Safe:會改變server state(新增了data)
not Idempotent:例如多次提交同一份表單「可能」(不是必然,depend on your code)會有side-effects
(注意與PUT的比較!!!)
PUT
更新(取代)目標data,目標原本沒有對應的data時,則新增之
不可cached,request帶body,successful response沒有帶body
not Safe:會改變server state(新增/更新了data)
Idempotent:跟POST不同,有既有data的話,會是以更新(整個取代/replace)的方式,所以不管put幾次都沒side-effects
使用時機判斷條件(滿足下面兩個原則):
1. 你的App的endpoint(端點)需要是Idempotent時
2. URL被做為資料更新後的地址(address)時
只滿足條件1不代表你非得使用PUT不可,記住POST的side-effects只是"可能有"
PATCH
目標data的部分修改,乃"update"的概念
不可cached,request、successful response均帶有body
PATCH的更新不同於PUT那種傳整個新的更新上去,而是有變的才更新
not Safe:會改變server state(更新了data)
not Idempotent:跟POST一樣,"可能"有side-effects (理解不能Ovo)
DELETE
刪除特定data,很直觀~
不可cached,request、successful response均「可能」帶有body
not Safe:會改變server state(刪除了data)
Idempotent:刪一次跟刪兩次竟然一樣?! 是的,沒side-effects,
只是原本已刪的資料如過嘗試再刪第二次,應該會跳一些錯誤訊息出來
所以由DELETE的例子來看,Idempotent應該是指邏輯運算上,不全然是直觀的"結果"