如果资源正在使用且无法删除,请更正 Delete API 的 HTTP 响应代码

Correct HTTP response code for Delete API if resource is in use and cannot be deleted

我正在处理一个请求删除资源的 API。如果资源正在使用中,即引用了其他类型的资源,则不允许删除它。此外,正在使用的资源极不可能被释放并且将来有资格被删除。在这种情况下,DELETE API 的响应代码应该是什么?

在服务器端将资源标记为已删除(例如标记)和 return 202 Accepted - The request has been accepted for processing, but the processing has not been completed. The request might or might not be eventually acted upon, and may be disallowed when processing occurs.

如果它阻止对客户端的进一步操作,我建议 500 - internal error

如果在某些情况下不允许删除资源是客户应该知道的业务规则,则适当的 return 代码应该是 400 (Bad request).

如果客户可以通过行动解决问题,例如首先删除引用资源,另一个更具体的代码可能是 409 (Conflict).

无论哪种情况,服务器都应根据 https://www.rfc-editor.org/rfc/rfc7231#section-6.5.

向客户端提供解释

根据 RFC-7231 (6.5.5)405 (Method Not Allowed) 响应代码是可缓存的,因此可能不适合后续请求 return 使用不同响应代码的机会仅仅是'highly unlikely'而不是不可能(根据系统规则)。

500 class 代码不合适,因为这些代码表明应该可以删除资源(根据系统规则),但服务器无法执行此操作因为某些原因。见 RFC-7231 (6.6)