首页 > 解决方案 > REST API GET 不返回任何内容的正确响应状态是什么?

问题描述

我有一个像这样的端点:

GET /api/customer/primary

如果存在主要客户,我会返回类似

{
  name: "customerName"
}

但是,如果我发送 GET 并且主要客户不存在怎么办?

使用空 JSON 发送 200 OK 是否更好{}

还是只发送 204 No Content 更好?

标签: resthttp

解决方案


404 是适当的状态码。您试图将“主要客户”表示为一种资源,但在某些情况下,这种关系并不存在。这种情况很清楚,应该是 GET 请求的 404。

这是一种完全可以接受的沟通方式。404 可能会通知客户端该资源尚不存在,并且可能可以使用PUT.

204 No Content具有特定含义,对您的情况没有多大意义。204不仅仅是为了表示不会有响应体(Content-Length: 0可以这样做),而且它对超媒体应用程序有更具体的应用程序。具体来说,它表示当用户执行导致 的操作时204,视图不应刷新。这对于例如“更新”操作是有意义的,用户可以在处理文档时偶尔保存他们的进度。对比205 Reset Content,这表明“视图”应该重置,因此(也许)可以从头开始创建新文档。

大多数应用程序都没有走这么远。坦白说,我一个都没见过。鉴于此,返回200orContent-Length: 0几乎204 No Content是完全不相关的讨论。HTTP 规范当然不禁止200 OK使用Content-Length: 0.

这有点切线。总而言之,404表示这个“东西”不存在,这在这里是合适的。没有多重解释。有写规范的人,读得很好的人,在讨论的另一边有错误的人。


推荐阅读