我正在创建一个 RESTful API,它将处理大量用户交互,包括使用存储的信用卡下订单。
如果订单成功,我将返回 200 OK,如果订单请求格式错误或无效,我将返回 400 Bad Request。但是在实际处理订单的过程中出现问题怎么办?
- 客户端向服务器发送请求以获取用户资源。如果用户不存在,返回404 Not Found。
- 订单格式和信息得到验证。如果无效,则返回 400 Bad Request。
- 订单已处理。如果订单成功,则会为订单返回 201 Created。如果遇到意外错误,将返回 500 服务器错误。
最后一步是问题所在 - 如果订单因任何其他原因未完成,我该如何返回?可能的情况可能包括:
- 产品已售罄
- 已达到用户最大订单限制
- 信用卡交易失败(资金不足等)
这似乎不适合 400 或 500。如果没有更好的代码,我可以将其视为 400 - 根据业务规则,请求无效。它只是看起来不准确。
编辑:还发现 this existing discussion同一个话题。那里的所有答案似乎都指向对此类违规使用状态代码,并在使用 400、409 或 422 扩展名之间进行了一些讨论。
最佳答案
您应该将 4xx 用于业务规则。如果订单未被接受,请不要返回 2xx。 HTTP 是一种应用程序协议(protocol),永远不要忘记这一点。如果您返回 2xx,则无论您在正文中发送任何信息,客户都可以假定订单已被接受。
来自 [RESTful Web 服务指南][1]:
One common mistake that some web services make is to return a status code that reflects success (status codes from 200 to 206 and from 300 to 307) but include a message body that describes an error condition. Doing this prevents HTTP-aware software from detecting errors. For example, a cache will store it as successful response and serve it to subsequent clients even when clients may be able to make a successful request.
关于http - 一般不成功请求(不是错误)的适当 HTTP 状态代码响应是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9381520/