json - 当请求的结果为空/未找到时,以 JSON 形式响应前端的最佳方式
问题描述
为简化起见,假设您有一个 REST API,其前端具有登录表单,并且您想检查用户是否存在。前端 HTTP/POST 一些数据到后端,后端查询数据库。结果是用户不存在,您想将该结果返回到前端。
我知道可能有很多方法可以返回结果,但是是否有任何“标准”或更正确的方法可以将“用户不存在”结果作为 JSON 返回?我在想的一些可能性:
- 将 JSON 作为字符串返回结果?
- 返回空对象?
- 返回带有布尔值的空用户对象 doesNotExist=false?
- 返回 404 未找到或其他一些 http 代码响应?
- 4和1的混合?
解决方案:
使用 HTTP 404 代码响应就足够了,不需要 JSON 正文。请记住,对于此登录用例,正如答案所指出的,当出于安全目的未找到用户时,不建议使用 404 HTTP 进行响应。
有用的资源:
解决方案
处理找不到资源的情况的标准方法是返回 404 错误状态。例如,如果您的 uri 是这样的,/user/{id}
那么这是尝试访问具有给定 ID 的用户类型的资源/文档,在这种情况下,如果找不到用户,那么 404 将是完全合适的。在这种情况下,您不需要专门返回 json 响应。
但是,您应该知道,出于安全目的,以这种方式验证用户的存在被认为是不安全的。如果攻击者知道有效的用户名或 ID,他们可以尝试暴力破解他们的密码。许多系统对无效用户标识符和无效密码(无效凭据)返回相同的错误,因此攻击者无法知道他们是否正确猜到了用户名。尝试对用户进行身份验证时,401 错误通常被认为是有用的响应。如果用户不存在或给定的凭据无效,则应返回 401。
推荐阅读
- java - EWS Java API 2.0 - 找不到自动发现服务
- python - 在 List Python 中查找位于特定字符串之间的字符串
- c# - 如何在 .NET Core Kestrel 中禁用 HTTP URL 方向
- user-interface - 在 Wxpython 中拖放图像
- reactjs - 阅读布局时,`useLayoutEffect` 是否优于`useEffect`?
- unity3d - 在由多个对撞机组成的飞机上修复鬼碰撞?
- gemfire - GemFire OQL 查询 - 如何在 WHERE 子句中使用 SELECT 语句的计数?
- python - 我如何计算python中的成员我需要完整的代码
- django - 将 ID 从 Ajax 传递到 Django 视图
- android - Android Studio 错误:类太大:project/co/dom/R$id (app:processDebugResources)