簡體   English   中英

無法執行DELETE時返回的正確的HTTP狀態代碼是什么?

[英]What is the correct http status code to return when a DELETE cannot be performed?

我的應用程序接受http DELETE請求,該請求將從通過休眠管理的數據庫中刪除條目。

刪除某些條目將產生hibernate.ConstraintViolationException,因為它們是另一個表中的鍵,因此不被接受。 但是,此錯誤會隨數據庫的狀態而隨時間變化。

在這種情況下正確的http響應是什么?

我想到了412(前提條件失敗),因為未滿足系統未使用的條目的前提條件。

這聽起來很像客戶端將無法糾正該錯誤(如果發生)。 僅此一項就符合5xx范圍的狀態碼:

狀態代碼的5xx(服務器錯誤)類表明服務器知道它已錯誤或無法執行所請求的方法。 […]這些響應代碼適用於任何請求方法。

確切地說,我認為這里是503(服務不可用) 該代碼通常用於指示維護,但實際上是指示服務器端的臨時狀態阻止了請求的實現。 這也符合這個答案

如果您對此感到不舒服,請按推薦順序選擇以下幾種方法:

但是, 如果客戶有機會糾正此錯誤(例如,先發出另一個請求),則5xx類就不可行了,您應該從代碼424開始。如果您擔心WebDAV會引入此代碼,不用擔心:它在IANA HTTP狀態代碼注冊表中列出,因此在HTTP中有效。

您考慮過409嗎? -“ 409(沖突)狀態代碼表示由於與目標資源的當前狀態沖突而無法完成請求。此代碼用於用戶可能能夠解決沖突並重新提交請求的情況。服務器應該產生一個有效載荷,該載荷包括足夠的信息供用戶識別沖突源。” -https://greenbytes.de/tech/webdav/rfc7231.html#status.409

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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