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

时间:2017-09-21 14:21:24

标签: rest api server http-status-codes

我对此进行了大量搜索并找到了不同的答案,我的情况也有所不同。

背景: 我有一个文件A,可能有发件人S

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

服务器Y应该返回什么:

  • 200:使用空对象(对于服务器X上的无效指针不是很好并且很危险)
  • 204:我认为是正确的状态,但这主要用于端点一般不返回数据(例如发布,更新,删除),这可能会造成混淆
  • 404:这绝对应该是... / sender / {sender_id}的答案。但在这种情况下,我们会询问文件的发件人,而且没有发件人是正确答案......

那么,最佳做法是什么,或者是否有另一种方法更适合这种做法。

提前致谢!

3 个答案:

答案 0 :(得分:1)

我建议404 Not Found最符合您所描述的“发件人缺席”

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

答案 1 :(得分:0)

这里有两种情况。

  1. 如果您正在请求集合,例如:/ users并且服务器上没有可用的用户,则您的服务应返回200 OK并带有空列表。

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

  3. 根据您的情况(假设您要求收集资源),我可能建议您使用空列表返回200 OK。如果您无法控制服务器,则可能需要在客户端进行空检查。

答案 2 :(得分:0)

广泛规则:不要试图使状态代码具体针对您的api或您的域模型的详细信息。这些是通用组件(如浏览器,缓存,代理)的消息,它们不需要了解有关域模型和集成协议的具体信息。

  

404:这绝对应该是... / sender / {sender_id}的答案。但在这种情况下,我们询问文件的发件人,没有发件人是正确答案......

4xx类响应代码表示an error in the client request。换句话说,客户问错了。 404特别暗示客户端将请求发送到错误的集成资源。

所以这不是你想要的。

  

204:我认为是正确的状态,但这主要用于端点一般不返回数据(例如发布,更新,删除),这可能会造成混淆

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

所以如果缺席发件人的表示是零字节长,那么!但是如果表示是一个空的json对象

{}

然后204离开桌子。

200 is probably your best bet