json - 如何区分 Controller 故意生成的 404 错误和 REST API 中的实际错误?

标签 json api rest http microservices

在 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/

相关文章:

javascript - Postman:如何在请求正文中使用环境变量

api - 保护未经身份验证的 REST API 的安全

javascript - 在 Angular JS 中过滤月份

javascript - 修改每个 JSON 对象的值

javascript - ";"怎么会是意外的token呢? ( react /巴别塔)

ios - {"cod":401, "message":“使用 Moya 时出现 Open Weather API 错误,API key 无效

rest - 如何在 angular.service 调用中捕获 401(或其他状态错误)?

wcf - 使用 WCF 或 ASP.Net Web Api 实现 RESTful API 的版本控制

java - 如何将这个嵌套的json字符串转换为java对象?

python - 在具有确切名称的不同 json 文件中搜索确切的字符串值