一般不成功的请求(不是错误)是什么合适的HTTP状态码响应?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (85)

我正在创建一个RESTful API,用于处理大量的用户交互,包括使用存储的信用卡下订单。

在订单成功的情况下,我返回200 OK,如果订单请求格式不正确或无效,我将返回400错误请求。但是,如果在订单的实际处理过程中出现问题,我应该返回什么?

  1. 客户端POSTS命令为服务器提供用户资源。如果用户不存在,则返回404 Not Found。
  2. 订单格式和信息经过验证。如果无效,则返回400错误请求。
  3. 订单已处理。如果订单成功,则会为订单返回201 Created。如果遇到意外错误,则返回500服务器错误。

最后一步是问题 - 如果订单因其他原因未能完成,我将返回什么?可能的情况可能包括:

  • 产品已售罄
  • 已达到用户最大订单限制
  • 信用卡交易失败(资金不足等)

这似乎不适合400或500.如果没有更好的代码,我可以将其视为400 - 根据业务规则,请求无效。这似乎并不准确。

提问于
用户回答回答于

应该使用400作为业务规则。如果订单未被接受,请不要退回2xx。HTTP是一种应用协议,永远不会忘记这一点。如果你返回2xx,客户可以假定订单已被接受,而不管你在正文中发送的任何信息。

RESTful Web服务

某些Web服务所犯的一个常见错误是返回一个反映成功的状态代码(状态代码从200到206,从300到307),但包含描述错误情况的消息主体。这样做可以防止HTTP感知软件检测到错误。例如,缓存会将其存储为成功响应,并将其提供给后续客户端,即使客户端可能能够发出成功的请求。

我会让你决定在4xx和5xx之间,但你应该使用错误状态码。

用户回答回答于

如果客户端可以修改请求以避开错误,则应该使用4xx作为客户端错误。使用5xx作为客户端无法真正解决的服务器错误。

扫码关注云+社区

领取腾讯云代金券