阿里云 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的默认值为10,Offset的默认值为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) } }
共 0 条评论