使用游标分页对列表进行分页
Zend亚博esk票务、语音和帮助中心api有几个端点,它们返回项目列表,比如票务、用户或文章。出于性能原因,API不会一次返回大量的记录集。它将结果分解成更小的子集,并在页面中返回它们。每页的项数因端点而异。例如,票据和用户端点每页返回100个项目,而文章端点每页返回30个项目。
本文解释了如何使用游标分页对列表进行分页。游标分页已经被大多数资源所支持,比如票据和用户。亚博电脑端它正逐步被引入所有资源。亚博电脑端有关特定资源,请参阅API文档。
亚博Zendesk建议尽可能使用光标分页而不是偏移分页。当检索非常大的记录集时,游标分页大大提高了性能。看到比较游标分页和偏移分页以比较Zendesk api支持的不同分页方法。亚博
免责声明Ze亚博ndesk提供本文仅用于指导目的。亚博Zendesk不支持或保证代码。亚博Zendesk也不能支持第三方技术,如Python和Ruby。
启用游标分页
若要使用游标分页而不是偏移分页,请包含页面(大小)
参数在请求的路径中。此参数指定每页要返回的项数。大多数端点将此限制为最多100个。有关特定资源,请参阅API文档。
如果你没有指定a页面(大小)
参数时,请求将恢复到偏移分页。
HTTP响应包含用于请求下一页的元数据。例如,对带有URL的票据端点的请求https://example.亚博zendesk.com/api/v2/tickets.json?page(大小)= 100
返回一个格式如下的响应:
“门票”:[…],
“元”:{
“has_more”:真正的,
“after_cursor”:“xxx”,
“before_cursor”:“多”
},
“链接”:{
“下一个”:“https://example.亚博zendesk.com/api/v2/tickets.json?page(大小)= 100和页面(后)= xxx”,
“上一页”:“https://example.亚博zendesk.com/api/v2/tickets.json?page(大小)= 100和页面(前)= yyy”
}
要请求下一页,可以使用下一个
链接或after_cursor
游标。看到与下一个链接分页和使用后光标进行分页。
何时停止分页
继续请求下一页,直到has_more
属性嵌套在元
对象为false。这表明没有进一步的记录,您应该停止分页。
到达记录结束后,可以保存的值下一个
或after_cursor
以便在将来检索新记录。
偶尔,您可能会得到一个空的记录集,其中after_cursor
,before_cursor
,下一个
和上一页
都是空的has_more
在前一页是正确的。当前页返回的最后一条记录是整个记录集中的最后一条记录时,就会发生这种情况。在本例中,保存之前的值after_cursor
供将来使用。
与下一个链接分页
属性指定的URL下一个
的性质链接
对象检索下一页的结果。
“链接”:{
“下一个”:“https://example.亚博zendesk.com/api/v2/tickets?page%5Bafter%5D=aQAAAAAAAAAAZGYzylUAAAAAaYBxUAwAAAAA&page%5Bsize%5D=20”
},
方法指定的URL发出请求下一个
财产。
请注意:某些资源没有亚博电脑端下一个
属性在他们的反应中。在这种情况下,您可以使用after_cursor
属性检索下一页的结果。看到使用后光标进行分页。
下面是Node.js的例子
本例以第三方服务器为例axios图书馆。
常量axios=需要(“axios”)
//在生产中,将凭据存储在环境变量中
常量亚博ZENDESK_SUBDOMAIN=“YOUR_亚博ZENDESK_SUBDOMAIN”
常量亚博ZENDESK_EMAIL=“YOUR_亚博ZENDESK_EMAIL_ADDRESS”
常量亚博ZENDESK_PASSWORD=“YOUR_亚博ZENDESK_PASSWORD”
让url=`https://$ {亚博ZENDESK_SUBDOMAIN}.亚博zendesk.com/api/v2/users.json`
常量身份验证={
用户名:亚博ZENDESK_EMAIL,
密码:亚博ZENDESK_PASSWORD
}
让参数个数={“页面大小”:10}
;(异步()= >{
做{
常量响应=等待axios。得到(url,{身份验证:身份验证,参数个数:参数个数})
常量数据=响应。数据
//处理数据
为(常量用户的数据。用户){
控制台。日志(用户。名字)
}
如果(数据。元。has_more){
url=数据。链接。下一个
}其他的{
url=零
}
}而(url)
})()
Python示例与下一个链接
本例以第三方服务器为例请求图书馆。
进口请求
在生产环境中,将凭据存储在环境变量中
亚博ZENDESK_SUBDOMAIN=“YOUR_亚博ZENDESK_SUBDOMAIN”
亚博ZENDESK_EMAIL=“YOUR_亚博ZENDESK_EMAIL_ADDRESS”
亚博ZENDESK_PASSWORD=“YOUR_亚博ZENDESK_PASSWORD”
url=f“https://{亚博ZENDESK_SUBDOMAIN}.亚博zendesk.com/api/v2/users.json”
身份验证=(亚博ZENDESK_EMAIL,亚博ZENDESK_PASSWORD)
参数个数={页面(大小)的:10}
而url:
响应=请求。得到(url,身份验证=身份验证,参数个数=参数个数)
数据=响应。json()
#处理数据
为用户在数据[“用户”]:
打印(用户[“名字”])
如果数据[“元”][“has_more”]:
url=数据[“链接”][“下一个”]
其他的:
url=没有一个
使用后光标进行分页
要请求下一页,请复制after_cursor
的响应值页面(后)
下一个请求的路径参数。
“元”:{
“has_more”:真正的,
“after_cursor”:“aQAAAAAAAAAAZGYzylUAAAAAaYBxUAwAAAAA”
},
下面的示例复制after_cursor
的响应值页面(后)
下一个请求的路径参数。
请注意:某些资源限制了多长亚博电脑端时间的价值after_cursor
是有效的。有关特定资源,请参阅API文档。
带有after游标的Node.js示例
常量axios=需要(“axios”)
//在生产中,将凭据存储在环境变量中
常量亚博ZENDESK_SUBDOMAIN=“YOUR_亚博ZENDESK_SUBDOMAIN”
常量亚博ZENDESK_EMAIL=“YOUR_亚博ZENDESK_EMAIL_ADDRESS”
常量亚博ZENDESK_PASSWORD=“YOUR_亚博ZENDESK_PASSWORD”
让url=`https://$ {亚博ZENDESK_SUBDOMAIN}.亚博zendesk.com/api/v2/users.json`
常量身份验证={
用户名:亚博ZENDESK_EMAIL,
密码:亚博ZENDESK_PASSWORD
}
让参数个数={“页面大小”:10}
;(异步()= >{
做{
常量响应=等待axios。得到(url,{身份验证:身份验证,参数个数:参数个数})
常量数据=响应。数据
//处理数据
为(常量用户的数据。用户){
控制台。日志(用户。名字)
}
如果(数据。元。has_more){
参数个数[“页面(后)”]=数据。元。after_cursor
}其他的{
url=零
}
}而(url)
})()
带有after游标的Python示例
进口请求
在生产环境中,将凭据存储在环境变量中
亚博ZENDESK_SUBDOMAIN=“YOUR_亚博ZENDESK_SUBDOMAIN”
亚博ZENDESK_EMAIL=“YOUR_亚博ZENDESK_EMAIL_ADDRESS”
亚博ZENDESK_PASSWORD=“YOUR_亚博ZENDESK_PASSWORD”
url=f“https://{亚博ZENDESK_SUBDOMAIN}.亚博zendesk.com/api/v2/users.json”
身份验证=(亚博ZENDESK_EMAIL,亚博ZENDESK_PASSWORD)
参数个数={页面(大小)的:10}
而url:
响应=请求。得到(url,身份验证=身份验证,参数个数=参数个数)
数据=响应。json()
#处理数据
为用户在数据[“用户”]:
打印(用户[“名字”])
如果数据[“元”][“has_more”]:
参数个数[的页面(后)]=数据[“元”][“after_cursor”]
其他的:
url=没有一个
筛选结果
某些资源允许过滤亚博电脑端由某些属性设置的记录。例如,可以按角色过滤用户。有关特定资源,请参阅API文档。
排序结果
某些资源允许按某亚博电脑端些属性对记录集进行排序。例如,票证可以根据其创建日期进行排序。有关特定资源,请参阅API文档。
限制
使用游标分页时,不可能跳转到记录集中的任意页码或位置。
当使用游标分页时,不提供集中的记录总数。某些资源提供不同亚博电脑端的端点来检索此值。例如,可以使用URL检索用户总数https://example.亚博zendesk.com/api/v2/users/count.json
。有关特定资源,请参阅API文档。
在对列表进行分页时,由于添加、删除或修改记录,已分页的数据可能不准确。减少分页不准确性的一种方法(虽然不能完全消除它们)是根据不能修改的属性(如id或创建日期,如果资源支持的话)对记录进行排序。