HTTP GET请求状态204 Vs 404

时间:2015-12-16 12:25:38

标签: rest http-status-code-404 httpresponse

我有2个资源用户和专辑。用户有一个专辑列表。要获得专辑,有2个REST API。

  1. user / {userId} / albums / {albumId}如果找不到,则按albumId获取相册返回404
  2. user / {userId} / albums按userId获取所有相册。在这种情况下,如果用户没有相册,那么状态代码204或404是什么?

5 个答案:

答案 0 :(得分:21)

没有任何专辑真的被视为错误吗?假设相册作为JSON数组返回,对这种情况的常见响应将是一个HTTP 200,其中包含一个空数组。

返回404表示该资源不存在,有人说它甚至可能要求该特定用户的专辑列表。但事实上,可以成功返回专辑列表,只是列表是空的。这对我来说似乎并不特别。这与使用不存在的ID(使用您的其他端点)检索一个特定相册完全相反;在这种情况下,404是正确的。

虽然204似乎比404更好,因为它至少告诉客户要求成功但没有内容,它的目的并不是用来表示“成功缺席”。相反,它表示资源存在,但由于某种原因,服务器选择不在响应主体中包含资源 - 例如,请求的目的可能是简单地将一些标头传回客户端。

A 204也可以用作对POST请求的响应,其中某些操作由服务器执行而不必创建任何新资源(这意味着创建了201),或者由于某些其他原因而不相关返回任何资源。

我认为你需要的是一个

GET /user/xxx/albums

HTTP/1.1 200 OK

[]

答案 1 :(得分:9)

错误代码404

当用户尝试关注损坏或死链接时,网站托管服务器通常会生成“404 Not Found”网页。

返回代码204

服务器已完成请求但不需要返回实体正文。

结论

你显然需要提出204错误。如果您使用404,用户可能会受到干扰。此外,当目标相册不存在时,您使用404。对于1和2使用404是缺乏逻辑的。

答案 2 :(得分:7)

以下是定义HTTP协议的RFC2616所说的状态代码:

  

状态代码的第一个数字定义了响应类。最后两位数字没有任何分类角色。有   第一个数字的5个值:

  - 1xx: Informational - Request received, continuing process

  - 2xx: Success - The action was successfully received,
    understood, and accepted

  - 3xx: Redirection - Further action must be taken in order to
    complete the request

  - 4xx: Client Error - The request contains bad syntax or cannot
    be fulfilled

  - 5xx: Server Error - The server failed to fulfill an apparently
    valid request

在您的情况下,请求已成功,但没有要显示的相册,因此您肯定应该使用2xx类别中的状态。

RFC是关于204状态的说法:

  

10.2.5 204无内容

     

服务器已完成请求但不需要返回   entity-body,可能想要返回更新的元信息。该   响应可能包括新的或更新的元信息形式   实体标题,如果存在,应该与...相关联   要求的变体。

     

如果客户端是用户代理,它不应该更改其文档   从导致请求发送的视图。这个回应   主要用于允许进行操作的输入   在不导致更改用户代理的活动文档视图的情况下,   虽然应该应用任何新的或更新的元信息   当前在用户代理的活动视图中的文档。

     

204响应绝不能包含消息体,因此是   始终以标题字段后的第一个空行终止。

RFC声明204主要用于允许输入,因此您不应使用此输入。在这种情况下,我会使用200。

答案 3 :(得分:4)

当您请求某个用户的特定资源时,例如该用户不存在,则应返回404。例如,您有一个API可使用以下URL检索用户:

https://yourdomain.com/api/users/:userid

并请求检索不存在的用户1234,然后应返回404。在这种情况下,客户端请求的资源不存在。

https://yourdomain.com/api/users/1234 
404

现在假设您有一个api,可以使用以下网址返回系统中的所有用户:

https://yourdomain.com/api/users

如果系统中没有用户,那么在这种情况下,您应该返回204。

答案 4 :(得分:0)

我同意答复,但是我认为是204或200,这取决于您的答复,如果专辑列表为空。

如果您将返回一个空数组,则以200个代码返回它,如果您不愿返回任何内容,那么正确的将是204。(我更喜欢一个200,但空列表)

不存在仅对资源使用404的情况,如果该列表为空,则选择204或200。

好黑客!