当前位置: 首页 > 知识库问答 >
问题:

API分页最佳实践

温浩大
2023-03-14

我希望一些帮助处理一个奇怪的边缘案例与我正在构建的一个分页API。

与许多API一样,这个API分页了大量的结果。如果查询/foos,将得到100个结果(即foo#1-100),以及一个指向/foos?page=2的链接,该链接将返回foo#101-200。

不幸的是,如果在API使用者进行下一个查询之前从数据集中删除了foo#10,/foos?page=2将抵消100并返回foos#102-201。

这对于试图拉动所有foos的API消费者来说是一个问题--他们不会收到foo#101。

处理这件事的最佳做法是什么?我们希望使它尽可能轻量级(即避免处理API请求的会话)。来自其他API的示例将非常感谢!

共有1个答案

凌和悦
2023-03-14

我不完全确定您的数据是如何处理的,所以这可能工作,也可能不工作,但是您考虑过用时间戳字段分页吗?

当您查询/foos时,会得到100个结果。然后,您的API应该返回如下内容(假设是JSON,但如果需要XML,则可以遵循相同的原则):

{
    "data" : [
        {  data item 1 with all relevant fields    },
        {  data item 2   },
        ...
        {  data item 100 }
    ],
    "paging":  {
        "previous":  "http://api.example.com/foo?since=TIMESTAMP1" 
        "next":  "http://api.example.com/foo?since=TIMESTAMP2"
    }

}

仅仅是一个注释,仅使用一个时间戳依赖于结果中隐含的‘限制’。您可能希望添加显式限制或同时使用until属性。

可以使用列表中的最后一个数据项动态地确定时间戳。这似乎或多或少是Facebook在其Graph API中分页的方式(向下滚动到底部可以看到我上面给出的格式的分页链接)。

一个问题可能是,如果您添加了一个数据项,但根据您的描述,听起来它们会被添加到最后(如果不是,请告诉我,我会看看是否可以改进这一点)。

 类似资料:
  • 问题内容: 我的iPhone应用程序连接到我的PHP Web服务,以从MySQL数据库检索数据。一个请求可以返回500个结果。 一次实现分页并检索20个项目的最佳方法是什么? 假设我从数据库中收到了前20个广告。现在如何请求接下来的20个广告? 问题答案: 从MySQL文档: LIMIT子句可用于约束SELECT语句返回的行数。LIMIT接受一个或两个数字参数,这两个参数都必须是非负整数常量(使用

  • 假设我有这条路线 第一个示例将调用中的函数,但第二个示例我不知道将函数放在哪里,无论是在还是中,我是否应该将第二个示例放在中?还是在销毁功能中显示DiscountController?哪一种是最佳实践?

  • Egg.js 的官方文档已经很完善了,想学习 Egg.js 的可以直接查看官方文档,但是如果只是开发接口,这个教程将你是最好的选择。

  • 问题描述 当前分页查询已经不局限于传统的通过用户单击页码栏实现分页 比如微博的首页就实现了滚动实时分页 所以出于好奇想问问大佬当前分页查询都有哪些成熟的实现方案,其各自的适用场景是什么

  • 在我的过去,我已经实施了一些网页刮取项目--从小型到中型(大约100.000个刮取页面)不等。通常我的起点是一个索引页,它链接到几个页面,上面有我想刮的细节。最后大部分时间我的项目都起作用了。但是我总是觉得我可以改进工作流程(特别是关于减少我给被清除的网站造成的流量的挑战[和连接到那个主题:被禁止的风险:D])。 这就是为什么我想知道你的(最佳实践)web刮板设计方法(针对小型和中型项目)。 通常

  • 这里有些给使用和编写 Ansible playbook 的贴士. 你能在我们的 ansible-example repository.找到展示这些最佳实践的 playbook 样例.(注意: 这些示例用的也许不是最新版的中所有特性,但它们仍旧是极佳的参考.) Topics 最佳实践 接下来的章节将向你展示一种组织 playbook 内容方式. 你对 Ansible 的使用应该符合你的需求而不是我们