应该从一个带有id列表的REST端点返回什么,其中一些是无效的?

时间:2017-03-30 17:01:42

标签: rest http asp.net-web-api2 api-design

我见过像this one这样的问题,询问如何处理构建API的API,它会为资源获取多个ID并返回一个列表。但我的问题是,如果这些ID中的一个或多个实际上与该资源的实例不匹配,那么响应应该是什么样的?

例如,

数据:

{id: 1, value: "one"}
{id: 2, value: "two"}
{id: 3, value: "three"}

请求:

.../data/id=1,5,2,6
OR
.../data?ids[]=1&ids[]=5&ids[]=2&ids[]=6


现在,端点应该返回

(1)

[
    {id: 1, value: "one"},
    null,
    {id: 2, value: "two"},
    null
]

OR

(2)

[
    {id: 1, value: "one"},
    {id: 2, value: "two"}
]

在REST标准中,重要的是保留所请求资源的顺序和/或列表的大小,还是只返回找到的资源?

我倾向于(2)因为如果你使用请求发送的id列表的顺序作为响应(3)中对象的直接映射,那看起来有点片状,因为它可能是无序的list(并没有那么有用,因为id应该已经存在于每个对象中)。

(3)

1,5,2,6
becomes
[
 id=1 =>    {id: 1, value: "one"},
 id=5 =>    null,
 id=2 =>    {id: 2, value: "two"},
 id=6 =>    null
]

1 个答案:

答案 0 :(得分:1)

失败时 您可以返回失败的Id列表以及合适的HttpStatusCode失败。

成功: 您可以返回预期数据和20000k HttpStatusCode。

因此api-consumer可以轻松检测成功和失败。

示例:我有7名学生的名单:[1,2,3,4,5,x,y],我不知道有多少人通过了考试。然后我会将这些ID发送到api以检查状态。然后

假设x和y是无效的ID,那么我的api将返回 [x,y]和状态码:400BadRequest

如果缺少x,y,我的api将返回状态代码:20000