• Ukieweb

    佳的博客

    曾梦想仗剑天涯,后来工作忙没去。

阿里云 aliyun sdk 翻页 的两种方法 pagesize pagenum 和 nexttoken

我们使用阿里云请求数据的时候,在获取返回结果时,可以使用Limit和Offset或者使用Token进行翻页

1. 使用 Limit 和 Offset 进行翻页

当需要获取的返回结果行数小于10000行时,可以通过Limit和Offset进行翻页,即:Limit+Offset<=10000,其中Limit的最大值为100。

说明 如果需要提高Limit的上限,请参见如何将多元索引Search接口查询数据的 limit提高到1000

如果使用此方式进行翻页时未设置Limit和Offset,则Limit默认值10Offset的默认值为0

2. 使用 Token 进行翻页

使用 Token 进行翻页时翻页深度无限制,当需要进行深度翻页时,推荐使用 Token 进行翻页。

如果设置了 NextToken,则请求参数 PageSize PageNumber 失效

可以使用 request MaxResults 参数设置返回条目数(第一次除外)

翻页过程中Token 长期有效,您可以通过缓存它并让 request 使用它返回 某一页的数据。

另外在 token 在翻页过程中无法跳页。

关于 token 的第一次查询:

第一次查询返回 10 条数据(不管你有没有设置 MaxResults)

第一次查询会给出 TotalCount, 再往后查此参数恒为 0 

后续查询

当符合查询条件的数据未读取完时,服务端会返回NextToken,此时 request 可以设置 NextToken继续读取后面的数据。(有 NextToken不设置的话,永远读取的是第一次内容)

读取完毕 NextToken 为 “”

3. 代码例子

我们以调用 查询一台或多台ECS实例的详细信息 接口为例

func Host() {

   req := ecs.CreateDescribeInstancesRequest()
   req.MaxResults = requests.NewInteger(30)
   //req.NextToken = "4b79bbd9907af779f62bbcd456b0e99c"

   ecsc := conn.NewConn().EcsClient()
   resp, _ := ecsc.DescribeInstances(req)
   requestCount := 1

   fmt.Println("nextToken:", resp.NextToken)
   fmt.Println("requestCount", requestCount)
   fmt.Println("data", resp)

   for resp.NextToken != "" {
      
      req.NextToken = resp.NextToken
      resp, _ = ecsc.DescribeInstances(req)
      requestCount++
      
      fmt.Println("nextToken:", resp.NextToken)
      fmt.Println("requestCount", requestCount)
      fmt.Println("data", resp)

   }
}

4. 参考

阿里云翻页

查询一台或多台ECS实例的详细信息








0
0
下一篇:设计 mysql 表 要不要使用 自增id

0 条评论

老佳啊

85后,大专学历,中原人士,家里没矿。

由于年轻时长的比较帅气,导致在别人眼里,我一直不谈恋爱的原因是清高,实则是自己的小自卑。最大的人生目标就是找一个相知相爱相容的人,共度余生。

和人相处时如果能感受到真诚,会非常注重彼此的关系,对别人没有什么心机,即使有利益冲突,一般也会以和为贵,因为在这个世界上,物质的东西,从来不会吸引到我。

特别迷恋那些大山大水,如果现在还能隐居,可能早就去了。对那些宏伟的有底蕴的人文景观比较不感冒。

从事于IT行业,却一直对厨房念念不忘,由于身材魁梧,总觉得自己上辈子是个将军,可惜这辈子没当兵,也不会打架。