0

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

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

所以我的问题是,假设家庭 ID = 110001,在系统中不存在,在这种情况下应该 404(Resource not found) 是响应代码或 412(Precondition failed) 是响应代码。

可能的争论。

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.

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

4

2 回答 2

1

HTTP 规范对412 状态代码进行了如下说明

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

因此,如果您发送带有您尝试添加的资源的实体标签If-Match的标头, 则此状态代码将是有意义的。

假设您要发布到以下内容

/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资源。

于 2014-01-22T23:40:06.220 回答
1

由于 Sotirios 给出的原因,412 不正确。

404 不正确,因为问题出在负载上,而不是寻址资源 (URI)。

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

于 2014-01-23T07:55:16.500 回答