我有一个暴露给iPhone和Android客户端的REST服务。目前我遵循HTTP代码200,400,401,403,404,409,500等。
我的问题是推荐错误的原因/描述/原因在哪里? REST API是否更有意义总是在标题中包含自定义Reason?
< 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将它放在Response Body中更好吗?
< 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" }
答案 0 :(得分:82)
引用400.x错误代码的HTTP规范:
4xx类状态代码适用于客户端的情况 似乎有错误。除了响应HEAD请求时, 服务器应该包含一个包含错误解释的实体 情况,以及是暂时还是永久的情况。这些 状态代码适用于任何请求方法。用户代理应该 向用户显示任何包含的实体。
最佳做法是将错误消息作为实体包含在HTTP响应的正文中 - 无论是JSON,纯文本,格式化HTML还是您可能想要使用的任何其他格式。
答案 1 :(得分:21)
最好在身体中包含错误详细信息。此外,许多(大多数/几乎所有,例如WSGI)服务器和客户端不支持更改错误代码的名称 - 将它们视为固定对(例如,400总是“错误请求”而不是“错误请求 - 您忘记指定用户ID“)。即使它们不会中断,它们也不会关心特定错误代码的特殊名称。
答案 2 :(得分:1)
答案 3 :(得分:0)
我总是两个都做。我通常将状态消息设置为前端可以友好的方式显示给用户的内容,例如&#34; 409 - 无法添加新用户,它们已经存在。&#34;
然后我将身体中的错误条件的详细信息作为JSON包含在内,以便UI开发人员可以尝试做出明智的选择。
{
"status": 409,
"message": "The user <username> was already added on <when> by <who> and given the user id 12345.",
"errors": {
"id": 12345
}
}