更正状态代码以发送给定 ID 与数据库中的对象不匹配的 HTTP POST 请求

Correct status code to send for an HTTP POST request where the given ID does not match an object in the database

假设我的 API 中有一个端点,具有以下 URL:

www.example.com/api/create-order-for-restaurant/

现在,在我的 POST 请求中,我发送以下数据:

{
    "restaurant_id": 43,
    "order": {...}
}

假设我的数据库中不存在 ID 为 43 的餐厅。应该发送回客户端的适当 HTTP 状态代码应该是什么?

我不知道应该发回 404 还是 500

这是一个客户端错误,因为客户端指定了 restaurant_id 不存在。

任何客户端错误的默认代码都是 400,它也适合这里。 有稍微更具体的客户端错误代码可能适用于这种情况,但它不是非常重要 除非 客户端可以使用此信息做一些事情。

  • 422 - 可以认为是正确的。 JSON 是可解析的,它只是包含无效信息。
  • 409 - 可以认为是正确的,如果客户可以首先创建具有该特定 id 的餐厅。我假设服务器控制 id,因此它可能不在此处。

所以 400、422 就可以了。 500 不是。 500 表示存在 server-side 问题,但据我所知,您描述的是客户端使用了不正确的 restaurant_id.

的情况