在 JSON-REST 服务架构中(方法和响应代码遵循 these patterns),我们经常需要生成有意的 404 响应 - 例如,如果 GET/users/123
被路由到一个 Controller ,然后无法找到 ID 为 123
的 User 实体,我们返回 404 响应,在许多情况下,该响应将包含带有错误消息/代码/等的 JSON 负载。
现在,当我们为特定 API 提供客户端时,我们希望客户端在不同条件下表现不同。例如,如果我们将客户端指向错误的主机,我们可能会收到未从该主机找到的 404 错误 - 与此相反,如果我们确实访问了该服务,我们可能会收到无效用户 ID 的 404 错误。
在这种情况下,就客户端而言,“404 未找到用户 ID”并不是错误 - 与任何其他“404 未找到”相反,后者会导致客户端抛出异常。
我的问题是,如何区分这些 404 错误?
仅基于响应?
通过添加 header 来指示有效响应?
或者其他方式?
最佳答案
这两种情况都可以返回 404。由于 4xx 代码是客户端相关代码,因此即使出现错误也可以返回内容。
现在,可以根据响应的正文来确定它是哪种 404。请记住,响应应携带与客户端提供的 Accept
header 兼容的 mime-type
。因此,如果客户端“知道”您的特定错误描述格式,您的服务器可以用更详细的描述进行回答。
这样,服务器就可以决定客户端是否能够理解 404 的详细响应,并且客户端也可以理解它何时刚刚收到常规 404,或者包含可以处理的消息.
这在语义上是正确的,并且与 HTTP 兼容。
关于json - 如何区分 Controller 故意生成的 404 错误和 REST API 中的实际错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35198346/