在HTTP头或响应体其余错误讯息?(Rest error message in HTTP Heade

2019-07-17 10:44发布

我有暴露于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" }

Answer 1:

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

该4XX类的状态代码是用于在客户端似乎有错误的案件。 响应HEAD请求时除外,服务器应该包括含有有关错误情况的解释的实体,以及它是否是临时或永久的条件。 这些状态码适用于任何请求方法。 用户端应该显示任何包括实体到所述用户。

这是最好的做法,包括错误消息在HTTP响应的主体的实体 - 无论是JSON,纯文本格式的HTML,或任何其他格式,你可能想利用。



Answer 2:

这是更好地在体内错误的详细信息。 此外,许多(大多数/几乎所有的,例如WSGI)服务器和客户端不支持更改错误代码的名称 - 把他们当作固定对(所以例如,400始终是“错误的请求”,而不是“错误的请求 - 你忘记指定用户ID“)。 即使他们不会打破,他们不会在乎的具体错误代码的特殊名称。



Answer 3:

该错误不会在体内的归属。 它属于在Warning头。

警告一般HTTP标头包含有关该消息的状态可能出现的问题的信息。

参考



Answer 4:

我总是一举两得。 我通常设置状态信息的东西,前端可以以友好的方式给用户,如显示“409 - 无法添加新用户,它们已经存在。”

然后,我包括在体内作为JSON错误情况的细节,使UI开发人员可以尝试让做什么明智的选择。

{
  "status": 409,
  "message": "The user <username> was already added on <when> by <who> and given the user id 12345.",
  "errors": {
    "id": 12345
  }
}


文章来源: Rest error message in HTTP Header or Response Body?