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

Posted

技术标签:

【中文标题】未找到搜索结果的正确 HTTP 状态代码是啥?【英文标题】:What is the correct HTTP status code for search results not found?未找到搜索结果的正确 HTTP 状态代码是什么? 【发布时间】:2019-05-01 18:55:06 【问题描述】:

我们正在用 Java 实现 REST API。

对于 GET REST 端点,如果我搜索某些内容:

    如果找到任何记录/记录,则它将返回 200 状态代码和结果/结果。

    如果没有找到记录,正确的 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 api 或youtube api 的约定。我的意见,我使用 200 和空列表,与上述参考相同。 如果没有找到任何东西被认为是与客户端相关的错误而不是返回 404,但通常这不应该是 IMO 本身的故障。 204 No Content 或多或少是为了通知客户端它可以保持其当前状态,因为处理的请求没有改变任何东西。因此,它更常用于PUT 操作。因此我会选择200 OK Response status code for searches in REST APIs的可能重复 【参考方案1】:

有两种不同的场景:

要检索没有项目的资源集合(例如GET /products?name=foo)的表示,请返回带有空数组的200

要检索不存在的单个资源(例如GET /products/1)的表示,请返回404

204 状态码用于,例如,作为PUT 操作的结果,允许服务器指示该操作已成功应用于目标资源。它不适合上述场景。


更多详情请参阅this answer。

【讨论】:

以上是关于未找到搜索结果的正确 HTTP 状态代码是啥?的主要内容,如果未能解决你的问题,请参考以下文章

tersus框架提示http状态404-未找到

广度优先搜索未找到正确路径

错误代码:400指的是啥错误?

单击处理程序未附加

取消请求的正确 HTTP 状态代码是啥

未找到合适的申请记录,无法获取等待上传状态