gpt4 book ai didi

rest - 无法删除最后一个联系人 - 什么 Http 状态代码?

转载 作者:行者123 更新时间:2023-12-04 14:31:01 27 4
gpt4 key购买 nike

我目前正在构建一个 Web API,并且有一个特定的场景,我无法确定哪个 HTTP 状态代码最适合返回。

情景

我有一个“客户”资源,它拥有一组联系人资源。

不变的是客户必须始终至少有一个联系人。因此,如果请求删除联系人并且此联系人是给定客户端的最后一个联系人,我需要返回一个适当的 HTTP 响应,指示该请求无法完成,因为您“无法删除最后一个联系人”。

我的感觉是这应该属于“4xx 客户端错误”的类别

我考虑了以下状态代码:

400 错误请求 - 我已经排除了这一点,因为它专门针对服务器无法理解的格式错误的请求。

405 方法不允许 - 起初这似乎很合适,但我认为 405 表明这种方法永远不应该被允许,但是上述情况只是暂时的。想法?

409 冲突 - 我一直倾向于这个,但是这个代码给出的常见示例通常是并发异常/编辑冲突。

有人对我在这种情况下应该如何应对有任何指导吗?

最佳答案

关键是在使用特定状态代码时查看客户端和缓存的期望。
以下是一些有用的 RFC2616 block :

10.4.1. 400 Bad Request

The request could not be understood by the server due to malformed syntax. The client SHOULD NOT repeat the request without modifications.


这表明请求本身是完全错误的——无论是语法还是协议(protocol)。您的具体情况实际上是应用程序协议(protocol)错误,因此这可能确实是合适的。

10.4.6. 405 Method Not Allowed

The method specified in the Request-Line is not allowed for the resource identified by the Request-URI. The response MUST include an Allow header containing a list of valid methods for the requested resource.


这是一个 transient 状态代码。如果 DELETE专门指联系资源本身(例如 DELETE /contacts/D9DF5176-EEE4-4C70-8DA7-BA57B82027A8 ),那么这可能是最合适的状态代码。但是,如果 DELETE在不同的资源或带有查询的资源(例如 DELETE /contacts?index=12 )上,那么我不会返回 405。再说一次,我通常避免使用 DELETE任何类似于查询的东西。

10.4.10. 409 Conflict

The request could not be completed due to a conflict with the current state of the resource. This code is only allowed in situations where it is expected that the user might be able to resolve the conflict and resubmit the request. The response body SHOULD include enough information for the user to recognize the source of the conflict. Ideally, the response entity would include enough information for the user or user agent to fix the problem; however, that might not be possible and is not required.


乍一看,这似乎是最合适的状态。在你的情况下,我可能更喜欢 400。 409 将清楚地表明与资源存在冲突,但除了完全改变资源(即首先添加联系人)之外,请求者实际上无法做任何事情来改变结果。大多数 409 响应是乐观并发失败,例如尝试修改自检索后已修改的资源。例如,查看 concurrency failures returned by AtomServer built over Apache Adbera .
因此,所有这些。我可能会使用 400 Cannot Delete Last Contact 之类的东西作为响应线。请记住,您可以更改与状态代码相关的短语。现在是做这种事情的好时机。

关于rest - 无法删除最后一个联系人 - 什么 Http 状态代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13831429/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com