带有部分结果的批量查询的REST状态代码

时间:2019-02-12 08:54:40

标签: rest http http-status-codes openapi

我正在创建一个REST API,客户端可以在其中查询某些ID的数据。查询示例如下:

/api/data?ids=1&ids=2&ids=3&start=2019-01-01&end=2019-02-12

这遵循用于传递数组的Open API规范:https://swagger.io/docs/specification/describing-parameters/#query-parameters

现在假设id 2和3存在并且分别返回1条记录和0条记录。还要假设id 1不存在。

应退还给客户什么?我倾向于返回带有字典的OK 200,其中id 3将作为键出现,但不包含任何数据,而id 1则根本不会出现。

类似这样的东西:

{
  {
    id=2,
    records=[154334, 324343]
  },
  {
    id=3,
    records=[]
  }
}

然后,客户端将不得不推断ID 1无效。当尝试发出查询以检索ID 1上的元数据时:

/api/entity/1

然后我将返回404 Not Found。

总的来说,我想找到一个很好的解决方案来处理查询提供部分匹配的REST API请求的响应和状态代码。

1 个答案:

答案 0 :(得分:1)

由于还有其他具有有效数据的字段,因此发送200将是正确的响应。推断数据不存在将是客户(被呼叫者的责任)。

此处要注意:发件人的请求正确。而且您还具有发送的过滤器的数据。

通过服务器的POV

这是类型的函数

GetData(
(name="id")List<int> ids, 
(name="start") DateTime startDate, 
(name="end") DateTime endDate){
           // your logic goes here
}
  • 发件人根据合同发送了一个请求。 (因此不是400)
  • 您作为服务器确实具有有效的数据,可以使用设置的过滤器进行响应(因此不是404)
  • 大概是设置了身份验证(因此不是401)
  • 您正在完全处理请求(因此不是202)
  • 您没有创建任何东西(因此不是201)。