如果父资源不存在,在REST API中使用哪个HTTP代码用于子资源?

时间:2014-10-15 17:15:09

标签: api rest http-status-codes

我和我的团队正在编写REST API,但有些概念仍未完全理解。

在给定资源中:objective/{id}/goal其中目标是集合

如果消费者试图达到不存在的目标,API将返回状态代码404,非常简单。

例如:objective/999返回404

由于某种原因,消费者试图从这个不存在的资源中获取目标:

例如:objective/999/goal返回?

哪种代码最合适?我觉得这也应该是404。有些人正在考虑另一个错误代码,因为API应该以某种方式告知父资源首先不存在。

1 个答案:

答案 0 :(得分:7)

使用404.请记住,404响应可能包含响应正文。因此,您可以回复以下内容:

Request
GET /objective/7/goal

Response
404 Not Found
{
    "type": "ParentNotFound",
    "description": "The parent resource was not found.",
    "parent_uri": "/objective/7"
}

通常,为错误状态代码包含某种响应主体是个好主意。即使以标准方式使用错误状态代码,作为API客户端仍然可以看到关于我看到错误的原因的人类消息。当错误状态代码以几乎标准但略微偏离的方式使用时,其好处甚至更大。