返回的正确HTTP错误代码是什么,404 vs 412?

时间:2014-01-22 23:04:40

标签: java web-services http rest http-response-codes

我正在设计REST API。在家中创建房间的POST请求之一需要输入房屋ID和房间名称,如:

POST  /webCall/development/construction
<?xml version="1.0"?><room><home id='110001'/><name>large bedroom</name></room>

所以我的问题是,假设家庭ID = 110001,系统中不存在,在这种情况下应该404(资源未找到)是响应代码或412(前提条件失败)是响应代码。< / p>

可能的争论。

Why 404 : The resource home with ID : 110001 is not found.
Why 412 : The precondition to create a room is that a home should exist,which fails here.

请提供您的建议和推理,这将有助于我做出正确的决定。

2 个答案:

答案 0 :(得分:1)

HTTP spec对412状态代码

说了以下内容
  

一个或多个请求标头字段中给出的前提条件   在服务器上测试时评估为false。此响应   代码允许客户端在当前资源上放置前置条件   元信息(标题字段数据),从而防止请求   方法应用于非预期资源。

因此,如果您要发送If-Match标头,则此状态代码会有意义 您要添加的资源的entity tag

假设您发布的内容如下

/homes/some-identifier/rooms

你可能应该返回404,因为资源/homes/some-identifier/rooms不存在。

如果你真的在做

POST  /webCall/development/construction
<?xml version="1.0"?><room><home id='110001'/><name>large bedroom</name></room>
然后409可能是最合适的。但是,我建议您将API更改为POST到实际的home资源。

答案 1 :(得分:1)

由于Sotirios给出的原因,

412是不正确的。

404不正确,因为问题在于有效负载,而不是已寻址的资源(URI)。

您可以使用400(通用),409或422。