我见过像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
]
答案 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