我有2个资源用户和专辑。用户有一个专辑列表。要获得专辑,有2个REST API。
答案 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 Not Found”网页。
服务器已完成请求但不需要返回实体正文。
你显然需要提出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。
好黑客!