You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

查询无结果时应返回哪种HTTP响应状态码?

查询无匹配数据场景的HTTP响应状态码选型

首先明确:你提到的「请求格式正确、服务端无处理错误、仅数据库未查到匹配数据」的场景,本身不属于请求错误或服务端故障,4xx、5xx类状态码确实完全不适用,这个判断没有问题。目前业界没有强制统一的标准答案,核心是根据接口类型选匹配语义的方案,常见落地方式分两类:

  • 返回200 OK + 结构一致的空结果
    这是目前业务接口里最常用的方案,尤其适合列表查询、分页筛选、批量查询这类面向集合的接口。
    具体做法很简单:保持响应体结构和有数据返回时完全一致,比如常规列表接口正常返回{"data":{"list":[...],"total":10},"msg":"success"},无匹配数据时直接把列表置为空数组、total置为0即可。
    这个方案的优势是调用方处理成本极低,不需要为无结果场景写特殊的状态码分支解析逻辑,也不受204不能携带响应体的限制,可以正常返回分页参数、筛选回显、提示文案等附加信息,不会触发代理、客户端的解析兼容问题。
  • 返回204 No Content
    这个方案仅适合单资源查询的窄场景,比如按唯一资源ID查询单个实体的接口(类似/api/books/9527),确认对应ID的资源完全不存在,且不需要给调用方返回任何额外信息时可以用。
    用这个方案必须严格遵守规范:204状态码下禁止携带任何响应体,哪怕是空的JSON对象{}也不行,否则会在部分网关、HTTP客户端里出现解析异常。如果你的接口需要返回空结果提示、分页元数据这类内容,绝对不要选204。

几个容易踩的坑

别乱用404:404的语义是「你请求的URL对应的接口/路由不存在」,不是「接口存在但没查到数据」,乱用404会直接误导调用方,以为是请求地址填错了,排查方向完全跑偏。
别死抠规范走极端:HTTP状态码是通用语义约定,不是必须逐字遵守的强制规则,落地时优先保证语义通顺、调用方处理逻辑简单,比硬套规范条文重要得多。
不要在200响应里塞业务错误码标识“无数据”:没查到匹配数据是正常的查询结果,不是业务异常,没必要额外加错误码增加调用方的判断成本。

内容的提问来源于stack exchange,提问作者aaron

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 11:27:21