首页 > 解决方案 > 当payload中的标识符不存在时,应该返回哪个http状态码?

问题描述

我有端点 POST /permission-period 应该为特定用户创建一个许可期。

有效载荷:

{
    "userId": 10,
    "permissionPeriodDateFrom": "2017-12-01",
    "permissionPeriodDateTo": "2017-12-10"
}

如果负载中的任何属性无效,我通常会返回 422 Unprocessable Entity,这意味着请求负载的语法有效但由于数据无效而无法处理。

如果用户不存在并且我不想向客户端提供此安全相关信息,我应该返回什么状态?我应该公开用户不存在或不存在的消息吗?

标签: resthttpapi-design

解决方案


我认为明智的 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 设计有所帮助。


推荐阅读