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

时间:2017-07-04 23:42:22

标签: rest http post

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

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

{
  customerDocument: {number: "123.456.789"},
  // other informations for create a order
}

所以,我的问题是:如果来自number的{​​{1}}不存在,是否可以返回 404 状态代码错误,并显示一条消息告诉客户没找到?

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

customerDocument

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

1 个答案:

答案 0 :(得分:10)

根据Wikipedia的定义,我认为400是此方案中的相应状态代码:

  

400错误请求

     

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

根据description,在语义上,422更好(“请求格式正确但由于语义错误而无法遵循。”)。但是,422是为WebDAV引入的,因此最好使用通用状态代码,例如400

400不是完美的状态代码,因为文档编号是否存在或有效是不是明显。但是,排除特殊用途状态代码,例如422400是最佳选择。

为什么404不合适?

从RESTful API的角度来看,端点/orders/是一种资源,无论它接受GET还是POST还是别的。 404仅在资源/orders/本身不存在时才适用。如果存在/orders/端点,但其调用失败(无论出于何种原因),则响应状态代码必须是404以外的其他内容。