在发送到 Rest API 的实体创建请求POST中,如果没有找到外键,返回的最佳状态代码是什么?

问题描述

我有一个rest api,可以满足像下面这样的帖子的请求。

POST /api/v1/products HTTP/1.1
Content-Type: application/json

{
    "name": "product test","categoryId": 111,"unitsInStock": 12,"unitPrice": 11
}

如果在这里找不到 categoryId 我想返回错误。什么是最好的 http 状态代码?我不认为这是 404,因为我还没有请求资源。

解决方法

状态代码是 transfer of documents over a network 域中的元数据。

这是一个您可以直接追溯到请求的问题(特别是请求正文中的信息不符合您的喜好),因此 4xx Client Error 是合适的。

描述客户端详细信息的信息属于响应正文。状态码是为了让通用组件粗略地理解响应体的语义。

IANA status code registry 列举了许多可能性;请记住,描述/原因短语不是定义——定义将在注册中列出的参考文件中。

我会考虑以下候选人

403 就其本身而言,完全令人满意“我理解您的要求,但我不会满足它。”不过,这是一个非常广泛的信息,尤其是您的操作员可能不乐意在您的访问日志中区分这些事件。

409 可能没问题。 “目标资源的当前状态”有点模糊。据我所知,通用组件会将 409 与 403 一视同仁,因此即使含义不完美,您也可能会侥幸逃脱?