Http Request Method: GET、POST、PUT、PATCH、DELETE

HTML
API

文件參考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應該是指邏輯運算上,不全然是直觀的"結果"


© 2021 Hamsterism. All rights reserved github