簡體   English   中英

使用POST在Rest中刪除/更新?

[英]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請求不是IdempotentDELETE請求是Idempotent

冪等HTTP方法是一種HTTP方法,可以多次調用而不會產生不同的結果

Idempotency性在構建fault-tolerant API時非常重要。

假設客戶想要通過POST更新資源。 由於POST不是冪等方法,因此多次調用可能會導致錯誤更新。 如果您向服務器發送POST請求會發生什么,但是會超時。 資源是否實際更新? 在向服務器發送請求或向客戶端發送響應期間是否發生了超時? 我們可以再次安全地重試,或者我們是否需要首先弄清楚資源發生了什么? 通過使用冪等方法,我們不必回答這個問題,但我們可以安全地重新發送請求,直到我們實際從服務器獲得響應。

因此,如果您使用POST進行刪除,則會產生后果。

在REST中我們通常知道POST用於添加一些東西, PUT用於編輯現有數據中的某些東西而DELETE用於刪除一些東西而POST請求not Idempotent但是DELETE請求是Idempotent 雖然上面是定義,但在我看來我們正在使用這些方法,因為為了better understanding特定方法用於什么目的,並且通過使用這些方法, UI developerBackend developer之間的橋梁不會被最小化。

如果你想使用POST方法而不是DELETE / PUT那么就沒有任何影響,但這不是一個好的編碼標准。

從純粹的技術角度來看,我並不知道任何真正的缺點。 其他人提到了冪等性,但這不僅僅是通過使用DELETE,你仍然必須實現它。

這給我們留下了設計考慮因素:

  • 您的客戶(或者更確切地說,程序員針對您的API進行編程)可能會合理地期望DELETE方法刪除內容,而POST方法則可以添加內容。 如果你不遵守這個慣例,你就會混淆它們。
  • 如果你使用POST來刪除和添加東西,你必須發明另一種方法來告訴實際做什么。 當然這不是很難,但它會使你的API更加復雜,沒有充分的理由。
  • 出於這兩個原因,您將需要更多更好的文檔,因為您沒有遵循已經記錄的RESTful原則。

當我們在我們的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM