rest - 当payload中的标识符不存在时,应该返回哪个http状态码?
问题描述
我有端点 POST /permission-period 应该为特定用户创建一个许可期。
有效载荷:
{
"userId": 10,
"permissionPeriodDateFrom": "2017-12-01",
"permissionPeriodDateTo": "2017-12-10"
}
如果负载中的任何属性无效,我通常会返回 422 Unprocessable Entity,这意味着请求负载的语法有效但由于数据无效而无法处理。
如果用户不存在并且我不想向客户端提供此安全相关信息,我应该返回什么状态?我应该公开用户不存在或不存在的消息吗?
解决方案
我认为明智的 HTTP 状态代码我会选择400 - Bad request
. 关于返回的错误消息,我会给用户一个有用的信息,同时对安全相关的信息保密。
你可以返回类似的东西The given userId is either malformed, does not exist or cannot be linked to the posted resource
。这将允许用户识别错误出现在正文中的位置(属性userId
),但不会告诉他确切的错误以防止用户枚举。
好消息是,您在创建时显然有一个受保护的端点,permission-period
因此 API 用户是可识别的,并且您可以采取其他措施来防止用户枚举和相关的暴力攻击,例如基于消费者的限制或在 x 次尝试后锁定 API 消费者。
我希望我的笔记对你的 API 设计有所帮助。
推荐阅读
- python - Ipywidgets 在交互式而不是小部件上观察方法
- javascript - Office Web 加载项中请求的资源上不存在“Access-Control-Allow-Origin”标头
- javascript - 将媒体流绑定到
- javascript - 在 Cloudflare Worker 上运行的 JavaScript 中的 Python 代码
- spring-boot - 带有自定义验证的 Spring Boot 测试实体字段验证
- html - 当动画在 DOM (Chrome) 中播放时,如果它位于“位置:相对”div,则溢出无法呈现
- c# - Dynamics CRM 集成 - 通过单个应用程序注册可以实现多个租户?
- javascript - 如何在不分离该模块的状态、变异、吸气剂的情况下分离 vuex 模块
- tensorflow - 使用 Transformer 进行文本摘要
- go - goruntine 没有同时运行?