92

我有一个向 iPhone 和 Android 客户端公开的 REST 服务。目前我遵循 HTTP 代码 200、400、401、403、404、409、500 等。

我的问题是放置错误原因/描述/原因的推荐位置在哪里?REST API 总是像这样在标题中包含自定义原因是否更有意义?

< HTTP/1.1 400 Bad Request - Missing Required Parameters.
< Date: Thu, 20 Dec 2012 01:09:06 GMT
< Server: Apache/2.2.22 (Ubuntu)
< Connection: close
< Transfer-Encoding: chunked

还是通过 JSON 将它放在响应正文中更好?

< HTTP/1.1 400 Bad Request
< Date: Thu, 20 Dec 2012 01:09:06 GMT
< Server: Apache/2.2.22 (Ubuntu)
< Connection: close
< Transfer-Encoding: chunked
< Content-Type: application/json
{ "error" : "Missing Required Parameters" }
4

3 回答 3

106

引用 400.x 错误代码的 HTTP 规范:

4xx 类状态码适用于客户端似乎出错的情况。除了响应 HEAD 请求时,服务器应该包含一个实体,其中包含对错误情况的解释,以及它是暂时的还是永久的情况。这些状态码适用于任何请求方法。用户代理应该向用户显示任何包含的实体。

最佳实践是将错误消息作为实体包含在 HTTP 响应的正文中 - 无论是 JSON、纯文本、格式化的 HTML 还是您可能想要使用的任何其他格式。

于 2012-12-20T01:33:36.783 回答
24

最好在正文中包含错误详细信息。此外,许多(大多数/几乎所有,例如 WSGI)服务器和客户端不支持更改错误代码的名称 - 将它们视为固定对(因此例如 400 始终是“错误请求”而不是“错误请求 - 你忘记指定用户 ID”)。即使他们不会破坏,他们也不会关心您对特定错误代码的特殊名称。

于 2012-12-20T01:31:30.107 回答
4

错误不属于正文。它属于警告标题。

警告常规 HTTP 标头包含有关消息状态可能存在的问题的信息。

参考

于 2018-08-20T17:37:46.943 回答