在JSON-REST服务架构中(方法和响应代码的these patterns之后),我们经常需要生成有意的404响应 - 例如,如果GET /users/123
被路由到控制器,那么然后无法找到ID为123
的用户实体,我们返回404响应,在许多情况下会包含带有错误消息/代码等的JSON有效负载。
现在,当我们为特定API提供客户端时,我们希望客户端在不同条件下的行为不同。例如,如果我们将客户端指向错误的主机,我们可能会从该主机中找不到404 - 而不是我们在达到该服务时可能获得的无效用户ID 404.
在这种情况下,就客户端而言,“找不到404用户ID”不是错误 - 而不是任何其他“404 Not Found”,这会导致客户端抛出异常。 / p>
我的问题是,您如何区分这些404错误?
仅仅基于回应?
通过添加标题来指示有效的响应?
还是其他方式?
答案 0 :(得分:1)
在两种情况下都可以返回404。由于4xx代码是客户端相关代码,即使出现错误也可以返回内容。
现在,可以根据响应的主体来决定它是什么类型的404。请记住,响应应该带有与客户端提供的mime-type
标头兼容的Accept
。因此,如果客户端“知道”您的特定错误描述格式,您的服务器可以回答更详细的描述。
通过这种方式,服务器可以决定客户端是否能够理解404的详细响应,和客户端在获得常规404时也能理解,或者可以理解其可以处理的消息
这在语义上都是正确的,并且与HTTP兼容。