payload中的identifier不存在应该返回哪个http状态码?

Which http status code should be returned when the identifier in the payload does not exist?

我有端点 POST /permission-period,它应该为特定用户创建权限期限。

负载:

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

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

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

我认为 HTTP 状态代码明智,我会选择 400 - Bad request。关于 returned 错误消息,我会在对 security-related 信息保密的同时为用户提供有用的信息。

你可以 return 像 The given userId is either malformed, does not exist or cannot be linked to the posted resource 这样的东西。这将允许用户识别 body 中出现错误的位置 (属性 userId) 但不会告诉他确切的错误以防止用户枚举。

好消息是,您在创建 permission-period 时显然有一个受保护的端点,因此 API 用户是可识别的,您可以采取其他措施来防止用户枚举和相关的暴力攻击,例如作为 consumer-based 在 x 次尝试后限制或锁定 API 消费者。

希望我的笔记对您的API设计有所帮助。