可能缺少实体的更正 HTTP 状态代码:200 或 204 或 404

Correct HTTP status code for possible absent entity: 200 or 204 or 404

我对此进行了很多搜索并找到了不同的答案,而且,我的情况有点不同。

上下文: 我有一个文件 A 和一个可能的发件人 S

服务器 X(不是浏览器)从服务器 Y 上的文档 A 请求发件人,但发件人不在。

服务器 Y return:

那么,什么是最佳实践,或者是否有其他方法更适合这种情况。

提前致谢!

我建议 404 Not Found 最符合您描述的 "sender is absent"

为了以防万一,您可以在这里看到状态代码列表:https://en.wikipedia.org/wiki/List_of_HTTP_status_codes

这里有两种情况。

  1. 如果您正在请求一个集合,例如:/users 并且服务器上没有可用的用户,那么您的服务应该 return 200 OK 并且列表为空。

  2. 如果您通过 ID 请求资源,例如:/users/id,如果用户不可用,那么您应该 return 404 NOT Found 作为您的用户 ID搜索在服务器上不可用。

根据您的情况(假设您正在请求资源集合),我可能建议 returning 200 OK 空列表。如果您无法控制服务器,那么您可能需要在客户端进行空检查。

一般规则:不要试图使状态代码具体化 api 或域模型的详细信息。这些是发送给通用组件(如浏览器、缓存、代理)的消息,这些组件不需要了解任何关于您的域模型和集成协议的细节。

404: this should definitely the answer for .../sender/{sender_id}. But in this case we ask the sender of a document, and no sender is a correct answer...

响应码的4xx class表示an error in the client request。也就是说,客户问错了。 404 特别意味着客户端将请求发送到错误的集成资源。

所以这不是你要找的。

204: a correct status I think, but this is mainly used when the endpoint does not return data in general (e.g. post, update, delete), which can be confusing

204 具有非常具体的含义 - 表示响应中提供的表示形式是 零字节长 。 “你让我把这个文件的内容发给你,我已经成功了,但顺便说一句,文件是空的。”

所以如果 不存在的发送者的表示是零字节长,高手!但是如果表示是一个空的 json 对象

{}

然后204就掉了table.

200 is probably your best bet.