了解偏移分页的局限性
由于数据的实时性,在使用偏移分页时,分页数据可能不准确。本文描述了这些不准确性是如何引入的以及减少它们的方法。
不准确性是如何引入的
当在下一页请求之间以及在遍历所有项的过程中向数据库实例添加或删除一个或多个项时,就会引入不准确性。
在Zendesk REST API和其他类似API使用的无状态偏移分页方法中,每个下一页请求都会导致服务器查询亚博数据库并返回指定的子集。完整的记录集不会被检索并静态地存储在内存中以供后续请求使用。
服务器使用总记录数除以每页最大记录数来确定要在每个下一页请求时返回的记录子集。如果总记录计数在请求之间发生变化,则为后续请求选择的记录子集也可能发生变化。如果添加了记录,可能会重新选择一些记录。如果删除记录,可能会跳过部分记录。为了更好地理解这一现象,请参见基于游标分页的实时数据分页在sitepoint.com上。
减少错误
减少分页不准确的一种方法是选择基于光标的分页,而不是偏移分页。看到使用基于游标的方法添加分页。基于游标的分页目前仅对Support API中的某些列表端点可用,包括票列表和用户列表。如果API文档对于没有列出分页方法的特定列表端点,则资源只支持偏移分页。
如果基于游标的分页不可用,减少分页不准确的一种方法(虽然不能完全消除)是将结果从最老的到最新的排序,以便在分页期间添加的新记录只影响最后的页面(如果有的话)。在所有条件相同的情况下,即使总记录计数发生变化,早期页面也始终具有相同的100条排序记录。
请注意:一些API资源(如U亚博电脑端sers)不能被订购。看到API文档为特定的资源。
要对记录进行排序,请附加sort_by = created_at
参数到初始端点URL以及每个端点URLnext_page
URL:
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
。看到文章。
根据端点的不同,您还可以按id排序,这些id在创建项时按顺序分配:
https://例子。亚博。com/api/v2/票。json?页面=2&sort_by=id
对于门票,另一种选择是使用增量票务出口端点。结果是基于时间而不是基于页面的。为了避免在后续请求中重复,端点返回页面上最新票证的更新时间作为start_time
值在一个'next_page' URL:
{
“结果”:[
…
],
…
“end_time”:1405469030,
“next_page”:“https://example.亚博zendesk.com/api/v2/incremental/tickets.json?start_time=1405469030”
}
另一种选择是使用Zendesk Support中的报告功能将数据导出到CSV或XML文件。亚博有关详情,请参阅导出数据为CSV或XML文件。