REST API中搜索的响应状态代码

Sta*_*yuk 11 rest http http-status-codes

假设我们有以下API:

GET /api/guests/{id}
Run Code Online (Sandbox Code Playgroud)
GET /api/guests?name=dummy
Run Code Online (Sandbox Code Playgroud)

当没有符合条件的客人时,我应该返回哪个状态代码?我的意思是没有名字假的客人.

应该是404,204还是200空数组?

cas*_*lin 17

每种情况的正确状态代码

考虑以下情况:

  • GET /api/guests?name=dummy

这是一个请求表示集合的操作.如果没有项匹配搜索条件,则返回200响应正文中带有空数组的状态代码,指示服务器已成功接收,理解和接受请求,并且集合本身存在但搜索未返回任何结果.

  • GET /api/guests/{id}

它是一种使用其唯一标识符请求表示单个资源的操作.如果未找到任何资源,则返回404错误,指示服务器未找到具有该标识符的资源.

更多细节

查看RFC 7231中的状态代码定义(更新旧的RFC 2616).很清楚:

6.3.1.200好的

200(OK)状态码表示请求成功.200响应中发送的有效负载取决于请求方法.对于本规范定义的方法,有效载荷的预期含义可归纳为:

  • GET:目标资源的表示;

  • HEAD:与GET相同的表示,但没有表示数据;

  • POST:表示行动的状态或结果;

  • PUT,DELETE:表示行动的状态;

  • OPTIONS:通信选项的表示;

  • TRACE:终端服务器接收的请求消息的表示.

[...]

6.3.5.204没有内容

204(无内容)状态代码表明服务器已成功完成了请求,并没有额外的内容在响应有效载荷给全身.响应头字段中的元数据在应用请求的操作后引用目标资源及其选定的表示.

[...]

6.5.4.404未找到

404(未找到)状态代码表明,原始服务器没有找到目标资源的电流表示或不愿意透露一个存在.一个404状态代码并不表示这个缺乏代表性的是暂时的还是永久的; 如果原始服务器可能通过一些可配置的方式知道条件可能是永久性的,则410(Gone)状态代码优先于404.

[...]

HTTP状态代码按类组织.看看这个:

6.3.成功2xx

2xx(成功)类的状态代码表示客户端的请求被成功接收,理解和接受.

6.5.客户端错误4xx

4xx(客户端错误)类的状态代码表明客户端似乎出现了偏差.除了在响应HEAD请求时,服务器应该发送一个表示,其中包含错误情况的解释,以及它是暂时的还是永久的.

[...]

  • 我不会使用204-作为客户端,如果您找到0/1/2/3 ...个匹配项,我希望200个和一个包含0/1/2/3 ...项的数组。仅当客户除了“确定,我已经完成”以外,实际上不希望其他响应时,才返回204。 (2认同)

Ale*_*lex 9

我会用空数组返回200 ...
或者204(无内容)

404是未找到资源的时间.在这种情况下,您的资源是客人的集合......存在.