[英]Filter the content in POST, UPDATE, DELETE REST requests using Java 8 and Maven with Spring 4.3 filter
[英]Use POST for delete/update in Rest?
我理解(從接受的答案HTTP和REST之間有什么區別? )REST只是一組關於如何使用HTTP的規則
接受的答案說
不,REST是應該使用HTTP的方式。
今天我們只使用一小部分HTTP協議的方法 - 即GET和POST。 REST的方法是使用所有協議的方法。
例如,REST規定使用DELETE擦除URI后面的文檔(無論是文件,狀態等),而使用HTTP,您會濫用GET或POST查詢,如... product /?delete_id = 22
我的問題是什么是缺點/缺點(技術或設計)如果我繼續使用POST方法而不是DELETE / PUT來刪除/更新Rest中的資源?
我的問題是什么是缺點/缺點(技術或設計)如果我繼續使用POST方法而不是DELETE / PUT來刪除/更新Rest中的資源?
POST
請求不是Idempotent
但DELETE
請求是Idempotent
。
冪等HTTP方法是一種HTTP方法,可以多次調用而不會產生不同的結果
Idempotency
性在構建fault-tolerant
API時非常重要。
假設客戶想要通過POST
更新資源。 由於POST不是冪等方法,因此多次調用可能會導致錯誤更新。 如果您向服務器發送POST請求會發生什么,但是會超時。 資源是否實際更新? 在向服務器發送請求或向客戶端發送響應期間是否發生了超時? 我們可以再次安全地重試,或者我們是否需要首先弄清楚資源發生了什么? 通過使用冪等方法,我們不必回答這個問題,但我們可以安全地重新發送請求,直到我們實際從服務器獲得響應。
因此,如果您使用POST進行刪除,則會產生后果。
在REST中我們通常知道POST
用於添加一些東西, PUT
用於編輯現有數據中的某些東西而DELETE
用於刪除一些東西而POST請求not Idempotent
但是DELETE請求是Idempotent
。 雖然上面是定義,但在我看來我們正在使用這些方法,因為為了better understanding
特定方法用於什么目的,並且通過使用這些方法, UI developer
和Backend developer
之間的橋梁不會被最小化。
如果你想使用POST方法而不是DELETE / PUT那么就沒有任何影響,但這不是一個好的編碼標准。
從純粹的技術角度來看,我並不知道任何真正的缺點。 其他人提到了冪等性,但這不僅僅是通過使用DELETE,你仍然必須實現它。
這給我們留下了設計考慮因素:
當我們在我們的rest API中使用POST而不是Delete時 ,我們正在從客戶端獲取Idempotency的強大功能。這意味着,通過使用POST,我們向API用戶說,這個API在多次擊中時會產生不同的結果。
在Timeout的情況下,API用戶必須查詢他已經請求刪除的資源。然后,如果找到,他必須調用POST API來刪除它。
如果使用Delete方法進行相同的請求,那么我們向API用戶保證對同一方法的多次調用將返回相同的結果。 因此,他可以提出任意數量的請求,直到他成功刪除而不是沒有enquriy超時。
注意:維持Idempotency是API制造商的職責。只需刪除方法就不會給出冪等性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.