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

Vit*_*tos 4 api rest http-status-codes

我和我的团队正在编写REST API,但仍然没有完全理解一些概念.

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

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

例如:objective/999退货404

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

例如:objective/999/goal退货?

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

Tim*_*lds 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"
}
Run Code Online (Sandbox Code Playgroud)

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