首页 > 解决方案 > 当请求的结果为空/未找到时,以 JSON 形式响应前端的最佳方式

问题描述

为简化起见,假设您有一个 REST API,其前端具有登录表单,并且您想检查用户是否存在。前端 HTTP/POST 一些数据到后端,后端查询数据库。结果是用户不存在,您想将该结果返回到前端。

我知道可能有很多方法可以返回结果,但是是否有任何“标准”或更正确的方法可以将“用户不存在”结果作为 JSON 返回?我在想的一些可能性:

  1. 将 JSON 作为字符串返回结果?
  2. 返回空对象?
  3. 返回带有布尔值的空用户对象 doesNotExist=false?
  4. 返回 404 未找到或其他一些 http 代码响应?
  5. 4和1的混合?

解决方案:

使用 HTTP 404 代码响应就足够了,不需要 JSON 正文。请记住,对于此登录用例,正如答案所指出的,当出于安全目的未找到用户时,不建议使用 404 HTTP 进行响应。

有用的资源:

了解 REST:动词、错误代码和身份验证

标签: jsonrest

解决方案


处理找不到资源的情况的标准方法是返回 404 错误状态。例如,如果您的 uri 是这样的,/user/{id}那么这是尝试访问具有给定 ID 的用户类型的资源/文档,在这种情况下,如果找不到用户,那么 404 将是完全合适的。在这种情况下,您不需要专门返回 json 响应。

但是,您应该知道,出于安全目的,以这种方式验证用户的存在被认为是不安全的。如果攻击者知道有效的用户名或 ID,他们可以尝试暴力破解他们的密码。许多系统对无效用户标识符和无效密码(无效凭据)返回相同的错误,因此攻击者无法知道他们是否正确猜到了用户名。尝试对用户进行身份验证时,401 错误通常被认为是有用的响应。如果用户不存在或给定的凭据无效,则应返回 401。


推荐阅读