我正在开发一个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示例,我有疑问。
答案 0 :(得分:10)
根据Wikipedia的定义,我认为400
是此方案中的相应状态代码:
400错误请求
由于明显的客户端错误,服务器无法或不会处理请求。
根据description,在语义上,422
更好(“请求格式正确但由于语义错误而无法遵循。”)。但是,422
是为WebDAV引入的,因此最好使用通用状态代码,例如400
。
400
不是完美的状态代码,因为文档编号是否存在或有效是不是明显。但是,排除特殊用途状态代码,例如422
,400
是最佳选择。
为什么404
不合适?
从RESTful API的角度来看,端点/orders/
是一种资源,无论它接受GET
还是POST
还是别的。 404
仅在资源/orders/
本身不存在时才适用。如果存在/orders/
端点,但其调用失败(无论出于何种原因),则响应状态代码必须是404
以外的其他内容。