REST API设计问题

时间:2018-08-30 17:21:45

标签: rest api

我正在调用REST API以获得资源列表,并且如果存在至少一个资源,则获取如下所示的json响应。

{
"value": [
    "res1_id",
    "res2_id",
    "res3_id"
]
}

,HTTP响应代码为200。

但是,当没有资源时,服务器将返回HTTP响应代码为404。 我怀疑为什么要这样设计(它是一种企业产品)。 我期待的是一个空列表,如下所示,HTTP响应代码为200:

{
"value": []
}

我无法理解为返回404(而不是空的json)而考虑了哪些设计决策。 请帮助我了解其背后的原因。

4 个答案:

答案 0 :(得分:0)

我在这里阅读的是您有一个“收藏”资源。此集合资源包含子资源列表。

这种情况有两种可能的解释。

  1. 收集资源的长度为0。
  2. 收集资源不存在。

大多数API都会将长度为0的集合视为仍存在的资源,并带有200 OK。空咖啡杯仍然是咖啡杯。最后一滴消失之后,咖啡杯本身并没有消失。

在某些情况下,可能需要将集合资源使用404。例如,如果您要指示一个集合不存在或从未创建过。

一种思考方式是空目录或不存在的目录之间的区别。两种情况都可以“告诉”开发人员其他情况。

答案 1 :(得分:0)

您正在尝试访问不存在的资源。这就是404的原因。

正如一个简单的Google搜索所说

  

HTTP 404、404找不到和404错误消息是超文本   计算机网络中的传输协议(HTTP)标准响应代码   通信,以表明客户端能够进行通信   给定服务器,但服务器找不到请求的内容。

针对您的情况

{
"value": []
}

这可以是状态码200,表示资源已访问并且返回的数据为空数组,也可以将其自定义为404。但是您最好提到的是返回200。

答案 2 :(得分:-1)

一些公司宁愿将错误告知他人,也不愿隐藏它们。我知道我在哪里工作,所以避免使用catch块,因为我们希望在测试过程中应用程序崩溃,从而可以解决问题。不隐藏它。因此,创建该API的开发人员可能希望您使用响应的状态码作为一种判断服务是否成功的方式。

答案 3 :(得分:-1)

状态码404是在没有资源根据您的请求返回时的正确响应。您要求提供数据,但没有数据。它返回一个空响应。他们依靠您来根据状态码来解释结果。

https://en.wikipedia.org/wiki/HTTP_404