【问题标题】:REST API - best method for error handlingREST API - 错误处理的最佳方法
【发布时间】:2011-11-24 03:01:11
【问题描述】:

在构造 API 响应时,哪种方法更适合(手动)返回状态码来指示请求的有效性:

1 - 在 JSON 响应中嵌入响应代码

{
  'status_code' => 200,
  'status_message' => 'OK',
  'data' => { ... }
}

2 - 还是修改 HTTP 标头状态字段更好?

Request URL:http://somesite.com
Request Method:GET
Status Code: 200 (EDITING THIS ONE)

我认为 HTTP 状态应该只与发生在服务器级别的连接错误和文件检索错误有关,而不是更改它以解决应用程序级别的错误。

任何好的文章和资源也将不胜感激。

【问题讨论】:

    标签: ajax api header http-response-codes


    【解决方案1】:

    我发现在 REST 请求中显示错误的最佳方法是将 HTTP 状态代码更改为正确的错误,并将错误嵌入响应中。

    如果您使用的是 JSON,它可能如下所示,在此示例中状态代码设置为 500:

    {"error" : "An error has occurred while trying to read from the database."}
    

    这个方法和Microsoft CRM uses to report errors是一样的,证明是个好方法;如果 RESTFul 应用程序需要 JSON(或 XML,如果您正在使用它),它们将不会无法解析响应。

    【讨论】:

    • 状态码 500 是否允许回传正文内容?
    • 是的。您实际上可以将正文内容放在任何状态代码上,但您不应该针对多个状态代码(204 No Content 就是一个明显的例子)。
    【解决方案2】:

    This question 解决了同样的问题(也许从稍微不同的角度来看)。

    我认为,一般来说,如果对应用程序中的资源的请求导致错误情况,则该事实应该反映在 HTTP 标头中。您可以使用应用程序响应来提供更详细的信息。

    更新Here 是一个有趣的应用程序错误到状态代码的映射(由 Azure 使用)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-24
      • 2016-12-26
      • 2016-08-21
      • 2017-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多