使用偏移分页对列表进行分页
Zend亚博esk Support、Talk和Help Center api有几个端点,这些端点返回项目列表,如票据、用户或文章。出于性能原因,API不会一次返回大量的记录集。它将结果分解成更小的子集,并在页面中返回它们。每页的项数因端点而异。例如,票据和用户端点每页返回100个项目,而文章端点每页返回30个项目。
本文解释了如何使用偏移分页(以前称为分页)对列表进行分页。虽然偏移分页仍然支持所有资源,Zendesk建议在可能的情况下迁移到光标分页。亚博电脑端亚博当检索非常大的记录集时,游标分页极大地提高了性能。
看到比较游标分页和偏移分页和使用游标分页对列表进行分页有关迁移到游标分页的详细信息。
免责声明Ze亚博ndesk提供本文仅用于指导目的。亚博Zendesk不支持或保证代码。亚博Zendesk也不能为Python和Perl等第三方技术提供支持。
使用偏移分页
当使用偏移分页时,返回的JSON对象包含一个next_page
属性与结果的下一页的URL(如果有的话)。例子:
“门票”:[…],
“next_page”:“https://example.亚博zendesk.com/api/v2/tickets.json?page=2”,
…
如果没有下一页,则值为零
.
“门票”:[…],
“next_page”:零,
…
您的代码应该检查next_page
属性调用任何列表端点时。如果为空,它可以继续前进。如果不为空,它应该使用指定的URL发出另一个请求。
排序结果
某些资源允许按某亚博电脑端些属性对记录集进行排序。例如,可以根据票证的创建日期对票证进行排序sort_by = created_at
请求参数:
url=“https://example.亚博zendesk.com/api/v2/tickets.json?sort_by=created_at”
…
url=“https://example.亚博zendesk.com/api/v2/tickets.json?page=2&sort_by=created_at”
一些端点有额外的sort_order
参数,应设置为asc。看到文章.
有关特定资源,请参阅API文档。
伪代码示例
下面的伪代码是对项进行分页的常见模式:
url=“https://example.亚博zendesk.com/api/v2/users.json”
而url是不零:
响应=请求(url)
//处理响应
url=响应(“next_page”)
Python示例
本例需要第三方请求图书馆.
url=“https://example.亚博zendesk.com/api/v2/help_center/sections/200646/articles.json”
而url:
响应=会话.得到(url)
数据=响应.json()
为文章在数据[“文章”]:
打印(文章[“标题”])
url=数据[“next_page”]
获取并处理第一页结果后,脚本检查next_page
财产。如果该值为空(Python认为为false),则循环停止。
限制
由于数据的实时性,分页数据可能不准确。在请求之间和遍历所有项的过程中,可能会从数据库实例中添加或删除一个或多个项。在Zendesk REST API和其他类似API使用的无状态、基于页面的分页方法中,每个下一页请求都会导致服务器查询数据亚博库并返回指定的子集。完整的记录集不会被检索并静态地存储在内存中以供后续请求使用。
服务器使用总记录数除以每页最大记录数来确定要在每个下一页请求时返回的记录子集。如果总记录计数在请求之间发生变化,则为后续请求选择的记录子集也可能发生变化。如果添加了记录,可能会重新选择一些记录。如果删除记录,可能会跳过部分记录。为了更好地理解这一现象,请参见基于游标分页的实时数据分页在sitepoint.com上。
减少分页不准确的一种方法(虽然不能完全消除)是将结果从最老的到最新的排序,以便在分页期间添加的新记录只影响最后的页面(如果有的话)。在所有条件相同的情况下,即使总记录计数发生变化,早期页面也始终具有相同的100条排序记录。