POST、PUT、PATCH 请求未知资源 return 400 或 404 中格式错误的主体应该吗?

Should badly formed body in POST, PUT, PATCH request to unknown resource return 400 or 404?

当向未知端点发出 POST、PUT、PATCH 请求且正文格式错误(例如,类型错误、缺少必填字段)时,应该 return 404 还是 400?

示例:

  1. 存在一个端点/resource/:resourceId
  2. 存在 resourcedId: 1 的资源。
  3. 端点需要 2 个字段用于 PUT 请求。 enable: booleancount: number.
  4. 客户端发出以下请求 PUT /resource/2 正文 { enable: 7 }

服务器应该return 404(因为带有resourceId: 2的资源不存在)还是400(因为正文格式无效)?

您应该做的第一个检查是您的客户端发出的请求是否格式正确。 如果不是 well-formed,你应该 return 一个 400 Bad Request Error,防止它超出你的控制器。 如果请求格式正确,您允许它访问您的业务逻辑层,如果它没有找到它正在寻找的资源(在您的情况下为“2”),那么您必须 return a 404 Not Found Error.

如有疑问,您有很多关于 HTTP codes 的文档,我留给您例如来自维基百科的文档

HTTP codes