不使用OData语法的Web API数据分页

时间:2013-08-16 10:33:22

标签: rest odata asp.net-web-api

web api中有哪些选项可指示返回的数据已被分页,并且还有其他可用数据。 带有OData的ASP.Net Web API使用类似于以下语法:

{
    "odata.metadata":"http://myapi.com/api/$metadata#MyResource","value":[
    {
        "ID":1,"Name":"foo"
    },
    ...
    {
        "ID":100,"Name":"bar"
    }
   ],"odata.nextLink":"http://myapi.com/api/MyResource?$skip=20"
}

是否有其他方法可以指示数据的下一个/上一个“页面”的链接,而不使用结果周围的元数据包装器。这可以通过使用自定义响应头来实现吗?

1 个答案:

答案 0 :(得分:2)

让我们退一步思考WebAPI。 WebAPI本质上是一种原始数据传递机制。它非常适合制作API,它可以将关注点分离到相当高的高度(特别是消除UI问题)。

但是,使用Web API并不能真正改变您所面临问题的核心。您问“我想如何以高效的方式查询我的数据存储并将数据有效地返回给客户端?”在构建更传统的Web应用程序时,您的决策与此问题完全相同。

如您所述,oData是一种返回此信息的方法。这里的好处是众所周知且定义明确。关于该主题的问题/博客/文章正在迅速增长。包装器不会增加任何有意义的开销。

然而,oData绝不是你能做到这一点的唯一方法。我们不得不应对此问题,因为软件一直在显示搜索结果。如果不真正理解你的情景,很难给你具体的建议。以下是一些在我阅读您的问题时冒出的问题:

  • 您的结果是否设置很大,但用户只能看到前一个或两个 网页?
  • 或者用户是否倾向于翻阅所有结果?
  • 结果页面是否有限(如每页20或50)或100/1000?
  • 数据集是否快速移动,因此会根据用户添加记录 寻呼?
  • 您的结果集是否简短并添加了可重复的列?
  • 您是否对客户端有足够的控制权来做带外事情 - 比如自定义HTTP标头,或者只是要求查询摘要的单独HTTP请求?

根据您的需要,确实有数百种选择。我不知道你在使用什么作为数据存储,但我在getting row count efficiently上写了一篇文章。这里的问题与此有很大关系,尽管从DB的角度来看。它可能会帮助你获得一些观点。