我有一个返回表格数据的REST资源:
http://example.org/api/tables/foo
这将返回foo
表格的第一页结果。
有一个查询参数可以为资源添加选择条件:
http://example.org/api/tables/foo?id=bar
id=bar
不是自由文本查询。在内部,服务器尝试将bar
解析为已知实体,并创建限制从foo
返回的行的正则表达式。要使此查询成功bar
必须是系统知道的ID,否则无法正确生成正则表达式。
如果系统不知道bar
,此资源的正确行为是什么?我知道5xx响应是不合适的,因为客户端无法再次调用并期望得到不同的结果。是否适合使用详细说明bar
未被识别的消息返回404响应?或者更好的是返回200响应(因为这是一个搜索结果),一些信封包裹空搜索结果,详细说明无法找到bar
?还有其他什么呢?
答案 0 :(得分:4)
这一切都取决于您的业务领域。
如果对您域中的某个未知实体的调用失败 - 您应该提供错误status code 4xx(如果我理解正确,则找不到该资源 - 因此状态代码为 404 Not Found 将适用于此处)。
如果对未知实体的调用没问题,它只会产生无结果(假设谷歌搜索产生0结果),您应该提供 2xx 的状态代码。
状态代码5xx是服务器错误,它们告诉客户端服务器端有问题。在您的情况下,您的服务器没有任何问题,因此这里的状态代码为4xx。
顺便说一下,您不必为每个错误使用所有错误代码 - 基本上,如果您查看业务域,您将看到只能使用这些代码的一小部分来描述您的错误。
请务必在回复中提供详细消息,以便使用您服务的人员能够获得尽可能多的详细信息和信息。
如果可以,请提供解释问题的在线资源的链接。例如,如果您有一个开发人员论坛帖子讨论这个确切的问题 - 提供该线程的链接。
如果必须使用错误代码,请使用字符串代码而不是随机数字,例如:使用“UNKNOWN_ENTITY”而不是错误编号#9842。
错误消息示例:
{
"message" : "Unknown entity provided".
"description" : "Parameter bar is not known to the system.",
"errorCode" : "UNKNOWN_ENTITY",
"links":
[
{ "rel" : "help",
"href" : "http://myforum.com/errors/unkownEntityError",
"title" : "My Forum"
},
]
}
答案 1 :(得分:1)
这是一个经常引起争论的问题,但大多数人会使用401 Unauthorized
或400 Bad Request
来表示错误。我通常使用401
表示登录失败/身份验证失败,400
表示错误参数。在400
响应的消息正文中,我经常返回一条指示错误参数的消息。