假设我们有以下API:
GET /api/guests/{id}
GET /api/guests?name=dummy
当没有符合条件的访客时,我应该返回哪个状态代码?我的意思是没有名字 dummy 的客人。
404
,204
或200
是否应为空数组?
答案 0 :(得分:13)
考虑以下情况:
GET /api/guests?name=dummy
这是一个请求表示集合的操作。如果没有项匹配搜索条件,则返回响应正文中带有空数组的200
状态代码,表示服务器已成功接收,理解和接受请求,并且集合本身存在但搜索已返回没有结果。
GET /api/guests/{id}
这是一个使用其唯一标识符请求表示单个资源的操作。如果未找到任何资源,则返回404
错误,指示服务器未找到具有该标识符的资源。
查看RFC 7231(更新旧RFC 2616)中的状态代码定义。很清楚:
<强> 6.3.1. 200 OK 强>
200
(确定)状态代码表示请求已成功。 200响应中发送的有效负载取决于请求方法。对于本规范定义的方法,有效载荷的预期含义可以概括为:
GET
:目标资源的表示形式;
HEAD
:与GET相同的表示形式,但没有表示数据;
POST
:表示行动的状态或结果;
PUT
,DELETE
:表示行动的状态;
OPTIONS
:通讯选项的表示;
TRACE
:结束服务器收到的请求消息的表示。[...]
<强> 6.3.5. 204 No Content 强>
204
(无内容)状态代码表示服务器已成功完成请求,并且没有其他内容可在响应有效负载正文中发送。响应头字段中的元数据在应用请求的操作后引用目标资源及其选定的表示。[...]
<强> 6.5.4. 404 Not Found 强>
404
(未找到)状态代码表示原始服务器未找到目标资源的当前表示形式,或者不愿意透露存在的目标资源。404
状态代码并不表示缺少代表性是暂时的还是永久性的;如果原始服务器通过某些可配置方式知道该条件可能是永久性的,则410
(Gone)状态代码优先于404
。[...]
HTTP状态代码按类组织。看看这个:
<强> 6.3. Successful 2xx 强>
2xx
(成功)状态代码表示客户的请求已成功接收,理解和接受。
<强> 6.5. Client Error 4xx 强>
状态代码的
4xx
(客户端错误)类表示客户端似乎有错误。除了响应HEAD
请求时,服务器应该发送一个表示,其中包含错误情况的解释,以及它是暂时的还是永久的。[...]
答案 1 :(得分:8)
我会以空数组返回200 ... 或204(无内容)
404是指未找到资源的时间。 在这种情况下,您的资源是客人的集合......存在。
答案 2 :(得分:4)
200 和空列表项。由于客人资源一般已找到,但您的查询没有匹配的项目