Rest responce最佳休息实践”;获得;方法状态?

Rest responce最佳休息实践”;获得;方法状态?,rest,Rest,我没有找到关于db中缺席对象的正确方法状态的有用信息 例如,我删除了id=1的用户,但有人试图通过query params id=1的get方法获取该用户的信息 哪个状态是正确的:404204400406还是410 我没有找到关于db中缺席对象的正确方法状态的有用信息 是的,没错-HTTP状态代码不会告诉您数据库中的任何行,它们告诉您的是文档存储中的文档(“资源”) 更准确地说,HTTP状态代码是元数据,它告诉通用组件(如web浏览器或缓存)响应的消息体中有什么内容 根据您放入邮件正文中的文档,

我没有找到关于db中缺席对象的正确方法状态的有用信息

例如,我删除了id=1的用户,但有人试图通过query params id=1的get方法获取该用户的信息

哪个状态是正确的:404204400406还是410

我没有找到关于db中缺席对象的正确方法状态的有用信息

是的,没错-HTTP状态代码不会告诉您数据库中的任何行,它们告诉您的是文档存储中的文档(“资源”)

更准确地说,HTTP状态代码是元数据,它告诉通用组件(如web浏览器或缓存)响应的消息体中有什么内容

根据您放入邮件正文中的文档,相应的状态代码可以是:

  • 二百
  • 404
  • 410
200声明消息体是一个文档(更广泛地说,是资源的当前表示)。404和410(以及所有4xx和5xx状态代码)宣布消息正文表示错误的解释

指示由请求的有效目标uri标识的文档目前不存在,但可能稍后存在;您可以附加缓存元数据,以便在服务器可能再次检查时进行通信

指示由请求的有效目标uri标识的文档现在不存在,并且该条件可能是永久性的。这种持久性意味着客户端可以删除书签,并且应该删除指向文档的远程链接,等等

如果回收ID,或者删除的ID可以恢复,那么410不是合适的选择


在某些API中,即使数据库中没有匹配信息,资源也具有当前表示形式

换句话说,资源的当前表示形式可能是空文档

200 OK HTTP/2
Content-Type: text/plain
Content-Length: 0
或者它可能是一个空对象

200 OK HTTP/2
Content-Type: application/json
Content-Length: 4

null
或者它可能是一个空列表

200 OK HTTP/2
Content-Type: application/json
Content-Length: 2

[]
还是一个空的物体

200 OK HTTP/2
Content-Type: application/json
Content-Length: 2

{}
还是一个模因

200 OK HTTP/2
Content-Type: text/plain
Content-Length: 36

This space intentionally left blank.
要使用的状态代码源于在没有特定信息可用时使用文档的某种“默认”表示的决定

当然,更常见的决定是选择不提供默认表示,而是宣布客户机犯了错误(在这种情况下,4xx类状态代码是正确的起点)


它不是要返回204(无内容)状态或类似的东西吗因为我认为200不是完全信息状态

也许-HTTP标准中存在一些模糊性,由于这种模糊性,我倾向于对204有偏见(今天,如果你查阅一些我以前的答案,我很可能在过去尝试204)

除了要连接的响应之外,200响应始终具有有效负载,尽管源服务器可能会生成长度为零的有效负载主体。如果不需要有效负载,则源服务器应该改为发送204(无内容)

因此,我们有两种不同的方法将零字节的数据发送回客户端;设置为零的200或204

这两件事是一样的吗

答案似乎是“不完全”;有一个微妙的差异记录在

204响应允许服务器指示操作已成功应用于目标资源,同时暗示用户代理不需要离开其当前“文档视图”(如果有)

现在,在web浏览器的上下文中考虑一下这一点。如果我单击指向空文件的链接,200响应将意味着浏览器将从当前“文档视图”中移开以显示空文件。但是204的语言建议浏览器应该保持原样,只指示空文件已成功下载

注意:我还没有做过任何实验来观察浏览器是否会这样做;我唯一的主张是呆在原地是特定的行为

我对规范的理解是204被设计为支持一个用例,该用例只在不安全操作的上下文中出现,比如PUT。你可以在很久以前就看到这方面的暗示

此响应主要用于允许输入脚本或执行其他操作,而不会导致更改用户代理的活动文档视图。响应可能包括实体标题形式的新元信息,这些信息应应用于用户代理当前活动视图中的文档


简言之,用204响应GET请求就是打赌通用组件的作者已经用与您相同的方式解释了规范中不明确的部分——我一点也不喜欢这种打赌。使用理解良好的200响应更可靠,并避免不必要的歧义。

我询问了API删除或根本不存在的信息。然后,它通过返回详细信息的方法上的一个字段获取。它不是要返回204(无内容)状态或类似的东西吗因为我认为200并不是一个完全信息化的状态。我已经添加了一章来解释为什么我不会在这里使用204。