4

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"
}

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

4

1 回答 1

2

让我们退后一步,想想 WebAPI。WebAPI 本质上是一种原始数据传递机制。它非常适合制作 API,并将关注点分离提升到一个相当好的高度(特别是消除 UI 关注点)。

然而,使用 Web API 并没有真正改变您所面临问题的核心。您在问“我如何以高效的方式查询我的数据存储并将数据有效地返回给客户端? ”在构建更传统的 Web 应用程序时,您在这里的决定确实与相同的问题相似。

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

然而,oData 绝不是您可以做到这一点的唯一方法。由于软件一直在显示搜索结果,我们不得不处理这个问题。如果没有真正了解您的情况,很难给您具体的建议。以下是我阅读您的问题时冒出的一些问题:

  • 您的结果集是否很大,但用户只能看到前一页或两页?
  • 还是用户倾向于翻阅所有结果?
  • 结果页数是有限的(例如每页 20 或 50 页)还是 100's/1000's?
  • 数据集是否快速移动,因此在用户分页时添加记录?
  • 您的结果集是否较短并且添加重复的列是否可以容忍?
  • 您是否对客户端有足够的控制权来做一些带外的事情——比如自定义 HTTP 标头,或者只是要求查询摘要的单独 HTTP 请求?

根据您的需要,确实有数百种选择。我不知道您将什么用作数据存储,但我写了一篇关于有效获取行数的帖子。尽管从数据库的角度来看,这里的问题非常密切。它可能会帮助您获得一些观点。

于 2013-08-16T14:44:33.450 回答