如何将错误返回给REST客户端(如果有的话)?

时间:2014-06-19 15:30:37

标签: rest

我有一个返回表格数据的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?还有其他什么呢?

2 个答案:

答案 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 Unauthorized400 Bad Request来表示错误。我通常使用401表示登录失败/身份验证失败,400表示错误参数。在400响应的消息正文中,我经常返回一条指示错误参数的消息。