2

使用 /api/v1/account/names 我请求数据库中的所有名称,但是如果我需要知道记录(名称)的数量怎么办?(用于分页)

您会推荐以下 REST-Urls 的哪种方法:

  1. /api/v1/account/names/count
  2. /api/v1/account/names?count -(不适用于泽西岛)
  3. /api/v1/account/names/records
  4. 你的建议...

api/v1/account/names 的结果和 api/v1/account/names#whatever# 的​​结果不同。

谢谢

4

3 回答 3

1

对于分页,您不应该进行计数查询,而是一次查询所有内容:计数和页面记录。

在您的数据库上,发出类似的问题(类似 PGSQL 的语法 - 获取 25 条记录的第 3 页,其中第 4 列的值为“x”)

Select
       row1, row2, row3, count(*) over()
       from MyShema.MyTable
       where row4 = 'x' order by row1 asc
       offset 75 limit 25;

结果集将包含第 4 列(每行)的总数。

然后构建一个看起来像的 Json 响应

{
   totalCount: 1280,     -- value in row 1 column 4
   offset: 75,
   rows: [
      [row1_1, row1_2,row1_3],
      [row2_1, row2_2,row2_3],
       ...
      [row25_1, row25_2,row25_3],
   ]
}

其中包含查询时间、偏移量和页面内容的总行数。

这个响应可以很容易地被分页网格处理。

于 2013-07-04T11:30:59.917 回答
1

我认为最好的方法是将这两个请求合并为一个并返回条目数,例如,在响应的标头中,以确保同时检索到条目及其计数。

于 2013-07-04T12:08:03.200 回答
0

如果GET /api/v1/account/names返回名称列表:

{
  "names": ["Foo", "Bar", "Baz"]
}

那么为什么不只是count这个列表中的一个元素:

{
  "names": ["Foo", "Bar", "Baz"],
  "count": 3
}

您可以将此子资源请求为GET /api/v1/account/names/count

{
  "count": 3
}
于 2013-07-04T11:31:46.783 回答