可能缺少实体的更正 HTTP 状态代码:200 或 204 或 404
Correct HTTP status code for possible absent entity: 200 or 204 or 404
我对此进行了很多搜索并找到了不同的答案,而且,我的情况有点不同。
上下文:
我有一个文件 A 和一个可能的发件人 S
服务器 X(不是浏览器)从服务器 Y 上的文档 A 请求发件人,但发件人不在。
服务器 Y return:
- 200:有一个空对象(对于服务器 X 上的空指针来说不是很好而且很危险)
- 204:我认为是正确的状态,但这主要用于端点一般不 return 数据(例如 post、更新、删除)时,这可能会造成混淆
- 404:这绝对应该是.../sender/{sender_id} 的答案。但是在这种情况下我们问一个文件的发件人,没有一个发件人是正确答案...
那么,什么是最佳实践,或者是否有其他方法更适合这种情况。
提前致谢!
我建议 404 Not Found
最符合您描述的 "sender is absent"
为了以防万一,您可以在这里看到状态代码列表:https://en.wikipedia.org/wiki/List_of_HTTP_status_codes
这里有两种情况。
如果您正在请求一个集合,例如:/users 并且服务器上没有可用的用户,那么您的服务应该 return 200 OK 并且列表为空。
如果您通过 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.
我对此进行了很多搜索并找到了不同的答案,而且,我的情况有点不同。
上下文: 我有一个文件 A 和一个可能的发件人 S
服务器 X(不是浏览器)从服务器 Y 上的文档 A 请求发件人,但发件人不在。
服务器 Y return:
- 200:有一个空对象(对于服务器 X 上的空指针来说不是很好而且很危险)
- 204:我认为是正确的状态,但这主要用于端点一般不 return 数据(例如 post、更新、删除)时,这可能会造成混淆
- 404:这绝对应该是.../sender/{sender_id} 的答案。但是在这种情况下我们问一个文件的发件人,没有一个发件人是正确答案...
那么,什么是最佳实践,或者是否有其他方法更适合这种情况。
提前致谢!
我建议 404 Not Found
最符合您描述的 "sender is absent"
为了以防万一,您可以在这里看到状态代码列表:https://en.wikipedia.org/wiki/List_of_HTTP_status_codes
这里有两种情况。
如果您正在请求一个集合,例如:/users 并且服务器上没有可用的用户,那么您的服务应该 return 200 OK 并且列表为空。
如果您通过 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.