REST API错误代码500处理

fab*_*ous 14 api rest error-handling http error-code

我们正在构建一个新的REST API.

我争辩说永远不应该返回错误代码500(内部服务器错误).

现在,当然,如果您知道客户端的参数是错误的,或者您可以控制所有内容并且可以返回一些适当的错误代码(例如422).

因此,如果发生意外错误,服务器可以:

  1. 不捕获意外错误,以便500个气泡到客户端
  2. 捕获任何意外错误并返回一些错误代码,表示"意外情况"(老实说,我找不到任何此类错误代码!)

还有其他选择吗?

Cod*_*ter 15

这是服务器错误,而不是客户端错误.如果不将服务器错误返回给客户端,则不会为它们创建整个状态代码类(即5xx).

您无法隐藏这样一个事实,即您发出编程错误或您依赖的某些服务不可用,这当然不是客户端的错.在那些情况下返回任何其他范围的代码而不是5xx系列是没有意义的.

RFC 7231在6.6节中提到.服务器错误5xx:

状态代码的5xx(服务器错误)类表示服务器知道它已经错误或无法执行所请求的方法.

情况确实如此.代码"500 Internal Server Error"没有任何"内部",因为它不应该暴露给客户端.


tok*_*kov 5

真正的问题是它为什么会产生500错误.如果它与任何输入参数有关,那么我认为它应该在内部处理并作为400系列错误返回.通常,400,404或406适合于反映错误输入,因为一般约定是由URL唯一地标识RESTful资源并且不能生成有效响应的URL是错误请求(400)或类似的.

如果错误是由请求显式或隐式提供的输入之外的任何其他引起的,那么我会说500错误可能是合适的.因此,500系列错误可准确表示失败的数据库连接或其他不可预测的错误.

  • 是的,但问题是在测试一个可能的新服务并征求关于如何最终处理这种情况的反馈的背景下构建的.如果我正在测试新服务并生成500个通过边缘案例输入测试用例,我会将其标记为失败测试并与开发人员一起处理测试场景,或者使用更具描述性的错误(400,404等)或者适当服务的请求(200).有500个错误的真正无法预见的来源,但你可以/应该尽可能地防御它们,即使这只是提供更多信息错误. (2认同)