当来自参数的实体不存在(或访问被拒绝)时,RESTful API 方法 [POST/PUT] 的正确响应代码

Proper response code for RESTful API method [POST/PUT] when the entity from parameter doesn't exist (or the access is denied)

我有一个 RESTful API 方法,它 creates/updates 一个带有几个参数的实体(例如 POST /classesPUT /classes/:id)。其中一个参数(例如 teacher)是其他一些不同类型实体的 ID。

我的问题是,当参数指示的实体不存在(或用户无权访问该实体)时,此方法的正确响应代码是什么。

我的选择是(对于 POST 和 PUT 方法):

我觉得这非常具有描述性和清晰性(以及一些错误消息)。但是,我想考虑潜在的替代方案或确认我的方法不是一个糟糕的设计。

The 404 (Not Found) status code indicates that the origin server did not find a current representation for the target resource or is not willing to disclose that one exists.
-- RFC 7231

强调我的。 404 在您描述的用例中是一个无意义的错误,因为当然没有目标资源的当前表示 - 您正在尝试创建它。 400 将是一个更好的状态代码,以及一个解释引用对象不存在的响应对象。

事实上,你的案例在RFC中并没有具体说明。每个状态都应引用 URL 请求的实体(资源)。如果不存在的资源是参数,则它不是 "target entity"。最合适的状态是400。