REST API:找不到数据的 HTTP 返回码是啥? [复制]

Posted

技术标签:

【中文标题】REST API:找不到数据的 HTTP 返回码是啥? [复制]【英文标题】:REST API: What HTTP return code for no data found? [duplicate]REST API:找不到数据的 HTTP 返回码是什么? [复制] 【发布时间】:2021-07-28 13:51:10 【问题描述】:

如果有人可以帮助解决这个争论,我们实际上可能会完成这个系统 LOL :^)

所以,如果您有一个 REST API.. 用于.. 说.. 返回患者详细信息...

然后您发送带有患者 ID 的请求... 但是数据库中实际上不存在具有该患者 ID 的患者..

您的 API 应该返回什么响应?

 1. a 404  ?  
 2. a 204  ? 
 3. a 200 with something in the body to indicate no patient found..

谢谢

【问题讨论】:

【参考方案1】:

使用 404:

404 未找到

服务器找不到请求的资源。在浏览器中,这意味着无法识别 URL。在 API 中,这也可能意味着 端点有效但资源本身不存在。 服务器也可以发送此响应而不是 403 来隐藏 存在来自未经授权的客户端的资源。这个回应 代码可能是最著名的,因为它经常出现在 网络。

来自 MDN 网络文档https://developer.mozilla.org/en-US/docs/Web/HTTP/Status

【讨论】:

【参考方案2】:

您的 API 应该返回什么响应?

视情况而定

状态代码是transfer of documents over a network 域中的元数据。状态码将 HTTP 响应的semantics 传达给通用组件。例如,状态码向缓存通告响应的消息正文是“资源的表示”还是an error situation 的表示。

数据库中的行是一个实现细节;就 REST 而言,不一定要有数据库。

REST 关心的是资源,在这种情况下,资源是否具有当前表示。 REST 不会告诉您资源模型应该是什么,或者它是如何实现的。 REST 告诉您的(通过它的标准化消息约束,在本例中是指 HTTP 标准)是如何描述资源模型中发生的事情。

例如,如果我的资源是“待办事项”,并且一切都已完成,那么我通常期望“待办事项”的 GET 请求返回一个 2xx 状态代码,其中表示无事可做(可能是一个完全空的文档,也可能是一个包含空项目列表的网页,或者是一个 JSON 文档……你懂的)。

如果数据库中的空结果集表明 URI 中存在拼写错误,则 404 是合适的。

考虑一个无聊的 Web 服务器可能会有所帮助,以及检索空文件与检索不存在的文件有何不同。

但是,和以前一样,在某些资源模型中,在没有文件的情况下返回“默认”表示可能是有意义的。


如果您有 REST API.. 用于.. 说.. 返回患者详细信息...

在资源模型中有一个文件说“我们没有这个病人的记录”是否合理?

我不是医疗文件领域的专家,但对我来说,我们可能会取回一份没有任何信息的文件,这听起来很合理。 “这是我们获悉的有关该患者的所有信息的清单”和一个空白清单。


您的 API 应该返回什么响应?

如果您要返回错误的表示形式 - 即解释某人要求的文档丢失的文档,那么您应该使用 404 Not Found 状态代码(以及指示该响应可以持续多长时间的其他元数据)缓存等)。

如果您要返回文档,则应使用带有 Content-Length 标头的 200 OK。

204 是专用的,不应在此处使用。 Content-Length 为 0 的 204 和 200 之间的主要区别在于 navigation 的含义。

【讨论】:

太棒了。感谢所有回复的人。

以上是关于REST API:找不到数据的 HTTP 返回码是啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

DJANGO REST API--找不到模块错误

找不到方法:'无效 Microsoft.PowerBI.Api.V1.PowerBIClient..ctor(Microsoft.Rest.ServiceClientCredentials, Syst

在 Rest API 中找不到处理资源

运行 REST API 时找不到 Tomcat 错误 404

为啥 Postman 找不到我的 Spring REST API?

使用 REST 访问 JPA 数据失败 找不到合适的 HttpMessageConverter