如何区分故意的,控制器生成的404与REST API中的实际错误?

时间:2016-02-04 10:21:05

标签: json api rest http microservices

在JSON-REST服务架构中(方法和响应代码的these patterns之后),我们经常需要生成有意的404响应 - 例如,如果GET /users/123被路由到控制器,那么然后无法找到ID为123的用户实体,我们返回404响应,在许多情况下会包含带有错误消息/代码等的JSON有效负载。

现在,当我们为特定API提供客户端时,我们希望客户端在不同条件下的行为不同。例如,如果我们将客户端指向错误的主机,我们可能会从该主机中找不到404 - 而不是我们在达到该服务时可能获得的无效用户ID 404.

在这种情况下,就客户端而言,“找不到404用户ID”不是错误 - 而不是任何其他“404 Not Found”,这会导致客户端抛出异常。 / p>

我的问题是,您如何区分这些404错误?

仅仅基于回应?

通过添加标题来指示有效的响应?

还是其他方式?

1 个答案:

答案 0 :(得分:1)

在两种情况下都可以返回404。由于4xx代码是客户端相关代码,即使出现错误也可以返回内容。

现在,可以根据响应的主体来决定它是什么类型的404。请记住,响应应该带有与客户端提供的mime-type标头兼容的Accept。因此,如果客户端“知道”您的特定错误描述格式,您的服务器可以回答更详细的描述。

通过这种方式,服务器可以决定客户端是否能够理解404的详细响应,客户端在获得常规404时也能理解,或者可以理解其可以处理的消息

这在语义上都是正确的,并且与HTTP兼容。