搜索结果未找到的正确HTTP状态码是什么?

4
我们正在使用Java实现REST API。
对于GET REST端点,如果我搜索某些内容:
  1. 如果找到任何记录,则将返回200状态代码和结果/结果。

  2. 如果未找到任何记录,则正确的HTTP状态代码是什么?

当我在Google和SO中搜索时,我发现了不同的答案。
200 with empty list (if the API response is item but NOT list, then I can't send empty list)
204 No Content
404 Not Found

如果记录未找到或搜索结果未找到,正确的HTTP状态代码是什么?

你可以考虑使用GitHub APIYouTube API的约定。我的意见是,我使用200和空列表,与上述参考资料相同。 - huytmb
如果未找到任何内容被认为是客户端相关的错误,那么返回一个404状态码,尽管一般来说这并不算是一个实质上的失败。204 No Content更多地用于通知客户端可以保持当前状态,因为处理的请求没有改变任何内容。因此,它经常与PUT操作一起使用。所以我会选择200 OK状态码。 - Roman Vottner
1
可能是REST API中搜索的响应状态码的重复问题。 - Roman Vottner
1个回答

12
有两种不同的情况:
  • 检索一个没有任何元素的资源集合(例如,GET /products?name=foo),应返回一个空数组并使用200状态码。

  • 检索一个不存在的单个资源 (例如,GET /products/1),应返回一个404状态码。

204状态码是为了表明服务器已经成功处理请求,例如执行了一个PUT操作。然而它不适用于上述情况。


详细信息请参见这个答案


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接