当前位置: 首页 > 知识库问答 >
问题:

对于业务规则失败,Web API 应返回什么 http 状态代码?[已关闭]

郤玉书
2023-03-14

想改进这个问题吗 通过编辑这篇文章,更新问题,以便用事实和引用来回答。

我对Web API中的客户资源进行了DELETE操作。URI看起来像 /customer/1000/.此操作将在系统内部停用客户。

在某些情况下,客户无法取消,因为他拥有一笔付款。

在成功取消的情况下,API 返回 200。如果由于待处理的付款而取消失败,API 应返回什么?我是否仍返回 200 但消息对象作为带有错误的响应?

共有2个答案

孙佐
2023-03-14

从技术上讲,是的。有关 Web API 错误消息的非常好的建议,请参阅此文章 在 web API 中返回错误的最佳做法 ASP.NET。

我倾向于避免为不成功的操作返回任何2XX,但这是个人偏好,因为对于此类事情没有明确的规则。我认为在某些情况下,这可能会让最终用户感到困惑,因为他们没有成功。同样,我避免了5XX,因为这给人的印象是有内部错误,或者他们应该重新提交。

这里有一个相关的论坛帖子,并提出了一些很好的观点: https://groups.google.com/forum/#!topic/api-craft/_dfnBKImNCI 上面帖子中的建议是使用带有自定义错误代码和消息的403,在这种情况下,我会建议,因为它似乎是最接近的。

希望有帮助:)

鲁城
2023-03-14

如果无法满足请求,则必须返回相应的状态代码。由于客户端有问题并且可以纠正状态,因此4xx类代码似乎很合适。来自 RFC 7231,第 6.5 节:

状态代码的4xx(客户端错误)类表示客户端似乎已出错。

在我看来,有三个适用的代码:

400在定义上有点宽泛,已经变成了(至少在我的印象中是这样)一应俱全的状态。因此,如果你不确定,400美元几乎总是一个安全的赌注。

此状态通常链接到 HTTP 身份验证框架。这是不公正的。从 RFC:

403(禁止)状态代码表示服务器理解请求但拒绝授权。

[…]请求可能因与凭据无关的原因而被禁止。

在这种情况下,这可能有点牵强,但并非完全不合理。

409(冲突)状态代码表示由于与目标资源的当前状态冲突,请求无法完成。此代码用于用户可能能够解决冲突并重新提交请求的情况。

伊莫,这是一个选择。RFC提到了<code>PUT</code>动词,但避免将409与之严格联系起来。

 类似资料:
  • 我正在处理WebAPI 2中的一个服务,endpoint当前返回一个<code>IHttpActionResult<code>。我想返回一个状态代码,但由于它不在枚举中,我不知道如何发送它,因为所有构造函数都需要一个参数 目前,我正在返回<code>BadResult(消息),但返回<code>422

  • 我使用curl获取http头以查找http状态代码并返回响应。我使用以下命令获取http头

  • 问题内容: 好的,我已经到处寻找了。基本上,我们使用的是跨域请求的$ http请求。我们的服务器允许该域,当请求返回200时,一切正常。但是,无论何时我们的服务器返回错误500、401,无论如何,Angular都认为这是CORS问题。 我用Fiddler调试了响应,以验证服务器是否返回了500,但Angular阻塞了。 这是请求: 然后在控制台中,我将看到: XMLHttpRequest无法加载f

  • 我最近参加了一个新项目。在这个项目中,所有正在使用的API总是返回状态代码200。即使响应应该是400或404,API也会返回状态代码200。 我问API为什么不返回其他响应代码,程序员告诉我他们不使用响应代码。他们把信息放在身体里。 例如,缺少一些必填字段,它们返回响应状态代码200,但正文返回如下 如果未经授权的用户试图访问,状态代码为200,身体像这样返回 我以前做的是非常不同的,我总是通过

  • 问题内容: 我们正在使用Flask作为我们的API之一,我只是想知道是否有人知道如何返回HTTP响应201? 对于诸如404之类的错误,我们可以致电: 但是对于201我得到 LookupError:201都不例外 我是否需要创建自己的例外,像这样的文档? 问题答案: 你可以在这里阅读。

  • 问题内容: 当JavaScript网络调用(例如fetch或XMLHttpRequest或任何其他类型的HTTP网络请求)失败且HTTP状态代码为0时,这是什么意思? 这似乎不是有效的HTTP状态代码,因为其他代码是HTTP规范中的三位数字。 我尝试将网络完全拔掉作为测试。它可能不相关,但是导致状态代码17003(IIRC),粗略搜索表明这意味着“ DNS服务器查找失败”。 相同的代码在某些位置和