使用REST请求表中记录数的最佳方法

时间:2013-07-04 10:44:47

标签: java rest

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

您建议使用以下REST-Urls的哪种方法:

  1. / API / V1 /帐户/名称/计数
  2. / api / v1 / account / names?count - (与泽西岛不兼容)
  3. / API / V1 /帐户/名称/记录
  4. 你的建议......
  5. api / v1 / account / names的结果和api / v1 / account / names#的结果#whatever# 是不同的。

    THX

3 个答案:

答案 0 :(得分: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],
   ]
}

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

此响应可以通过分页网格轻松处理。

答案 1 :(得分:1)

我认为最好的方法是将这两个请求合二为一,然后在响应标题中返回条目数,以确保在同一时间检索条目及其计数。

答案 2 :(得分: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
}