我正在设计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.
请提供您的建议和推理,这将有助于我做出正确的决定。
答案 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)
412是不正确的。
404不正确,因为问题在于有效负载,而不是已寻址的资源(URI)。
您可以使用400(通用),409或422。