rest - REST API GET 不返回任何内容的正确响应状态是什么?
问题描述
我有一个像这样的端点:
GET /api/customer/primary
如果存在主要客户,我会返回类似
{
name: "customerName"
}
但是,如果我发送 GET 并且主要客户不存在怎么办?
使用空 JSON 发送 200 OK 是否更好{}
还是只发送 204 No Content 更好?
解决方案
404 是适当的状态码。您试图将“主要客户”表示为一种资源,但在某些情况下,这种关系并不存在。这种情况很清楚,应该是 GET 请求的 404。
这是一种完全可以接受的沟通方式。404 可能会通知客户端该资源尚不存在,并且可能可以使用PUT
.
204 No Content
具有特定含义,对您的情况没有多大意义。204
不仅仅是为了表示不会有响应体(Content-Length: 0
可以这样做),而且它对超媒体应用程序有更具体的应用程序。具体来说,它表示当用户执行导致 的操作时204
,视图不应刷新。这对于例如“更新”操作是有意义的,用户可以在处理文档时偶尔保存他们的进度。对比205 Reset Content
,这表明“视图”应该重置,因此(也许)可以从头开始创建新文档。
大多数应用程序都没有走这么远。坦白说,我一个都没见过。鉴于此,返回200
orContent-Length: 0
几乎204 No Content
是完全不相关的讨论。HTTP 规范当然不禁止200 OK
使用Content-Length: 0
.
这有点切线。总而言之,404
表示这个“东西”不存在,这在这里是合适的。没有多重解释。有写规范的人,读得很好的人,在讨论的另一边有错误的人。
推荐阅读
- r - 将 YYYYMM 中的日期转换为 YYYY-MM-DD
- java - 未检测到 Pact 测试 PactProviderRule
- amazon-s3 - 从谷歌云存储到 s3 的 gsutil rsync 挂在大文件上
- vb.net - 如何在数据表vb.net中查找所有空项
- unity3d - 预制敌人都走在相同的随机路径
- c# - 从多个线程调用 TcpListener.AcceptTcpClient 方法
- ajax - 带有 AJAX 返回 403 (nginx) 之类的 WordPress 网站
- node.js - process.env TypeError:无法读取未定义的属性“PATH”
- apache-kafka - 在 Kafka 中重新创建 Kinesis 交错窗口
- tomcat - 无法加载 JDBC 驱动程序类“net.sf.log4jdbc.sql.jdbcapi.DriverSpy”