可以在POST中返回http状态404吗?

Dhe*_*rik 6 rest post http

我正在开发一个API,我总是尝试为每个场景使用最正确的http状态代码.

其中一种情况是POST请求的响应.例如,端点的POST方法/orders/接收一些信息,如customer:

{
  customerDocument: {number: "123.456.789"},
  // other informations for create a order
}
Run Code Online (Sandbox Code Playgroud)

所以,我的问题是:如果numbercustomerDocument不存在,是否可以将返回一个404个一个不错的消息,通知客户并没有找到状态码错误?

我通常在特定资源中使用404仅用于GET(最明显的用法),例如:

/customers/{number}/
Run Code Online (Sandbox Code Playgroud)

在诸如"客户不活跃"的业务验证中,我通常使用http状态代码422进行任何http方法(POST,PUT,GET等).我有疑问是否可以使用404或422作为我的POST示例.

sha*_*ncs 11

400根据维基百科的定义,我认为在这种情况下是适当的状态代码:

400错误请求

由于明显的客户端错误,服务器无法或不会处理请求.

根据描述,在语义上,422更好("请求是格式良好但由于语义错误而无法遵循.").但是,422为WebDAV引入,因此最好使用通用状态代码,如400.

400不是完美的状态代码,因为文档编号是存在还是有效并不是那么明显.但是,排除特殊用途状态代码,例如422,400是最佳选择.

为什么404不合适?

从观点的RESTful API点,终点/orders/是一个资源,无论接受GETPOST或别的东西.404仅在资源/orders/本身不存在时才适用.如果/orders/端点存在,但其调用失败(无论是什么原因),响应状态代码必须是其他内容404.