REST应用请求不存在资源:返回404还是200带{"data":null}?
该返回404还是200带{"data": null}?
这确实是REST API设计里很容易纠结的问题,结合你提到的Ember Data实践和JSON API规范,我来拆解一下两种方案的逻辑:
从JSON API规范的角度看
JSON API明确规定:
Primary data MUST be either: a single resource object, a single resource identifier object, null, or an array of these.
所以当请求的单个资源不存在时,返回状态码200并携带{"data": null}是完全符合规范的——null是允许的主数据类型之一,这种方式能保持响应格式的一致性,不会因为资源不存在就打破API的返回结构。
从Ember Data的实践角度看
你倾向返回404的想法非常合理,因为Ember Data对HTTP状态码的错误处理有一套成熟的机制:
- 当API返回404时,Ember Data会直接触发模型查找失败的钩子(比如
adapterError),前端可以很自然地捕获这个状态,跳转到404页面或者显示资源不存在的提示。 - 如果返回200带
null,前端需要额外在业务逻辑里判断data是否为null,再做对应的处理,反而增加了不必要的代码复杂度,也不符合前端框架对错误状态的常规处理习惯。
给你的建议
- 如果你的API需要严格遵循JSON API规范,且前端团队已经做好了处理
data: null的准备,那么返回200 +{"data": null}是合规的选择。 - 如果你主要配合Ember Data这类前端框架开发,更推荐返回404状态码——框架原生的错误处理流程能让前端开发更顺畅,也更符合HTTP状态码的语义(404本身就是用来表示“请求的资源不存在”)。
- 最重要的是保持一致性:不管选哪种方案,所有“资源不存在”的场景都统一处理,避免出现有的返回404、有的返回200带null的混乱情况。
内容的提问来源于stack exchange,提问作者Nathan Hughes
相关产品推荐
相关产品推荐

