未找到搜索结果的正确 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 状态代码是啥?的主要内容,如果未能解决你的问题,请参考以下文章