aliyun SDK 中 两种方式查询数据 分页设置 NextToken 和 PageSize,PageNumber
具体看网关说明: https://help.aliyun.com/document_detail/25506.html; 以下为解读:
方式一 PageSize ,PageNumber
通过 PageSize 设置单页返回的条目数,再通过 PageNumber 设置页码;这是常见方式,就不说了。
方式二 MaxResults,NextToken
分页查询首页时,仅需设置 MaxResults 以限制返回信息的条目数,返回结果中的 NextToken 将作为查询后续页的凭证。
查询后续页时,将 NextToken 参数设置为上一次返回结果中获取到的 NextToken 作为查询凭证,并设置 MaxResults 限制返回条目数。
注意点:
以上两种方式只能任选其中之一。当返回的条目数较多时,推荐使用方式二 NEXTTOKEN。
两种方式都会返回 nextToken
如果还有条目:返回 nextToken
如果没有条目:nextToken 就是空(注意它的指针值还是有的)
关于 TotalCount 总数
如果设置了 MaxResults 或 NextToken 参数,则请求参数 PageSize 和 PageNumber 将失效,且返回数据中的 TotalCount 无效。换句话说,如果这两个参数都不设置,则使用的就是 page 方式。
也就是说使用这种方式,你无法直接从返回结果中获取总条目数,如果需要TotalCount,要自己计算。
获取 totalCount 的变态方法
使用 page 方式先获取一次(pageSize可以设置小一点),得到 totcalCount,还会额外得到 NextToken 然后再根据NextToken 循环。(使用 page 方式返回结果中也存在 nexttoken)
好处:
直接得到 TotcalCount
for nextToken 时的 注意事项(建议放后面)
nextToken 赋值放在后面
for tea.StringValue(resp.Body.NextToken) != "" { //查询 resp, err = o.ecs.DescribeInstancesWithOptions(describeInstancesRequest, runtime) if err != nil { return nil, nil, err } //放到后面 describeInstancesRequest.NextToken = resp.Body.NextToken }
nextToken 赋值放在前面
for tea.StringValue(resp.Body.NextToken) != "" { //放到前面 describeInstancesRequest.NextToken = resp.Body.NextToken //查询 resp, err = o.ecs.DescribeInstancesWithOptions(describeInstancesRequest, runtime) if err != nil { return nil, nil, err } }
他们的区别是:
放在后面:for 是从头查(因为没有nexttoken值)
放在前面:for 是接着查
使用场景:
需要处理数据时 dosht 时; 放后面,从头查, dosth 只存在与 for;但是需要多查询一次
for tea.StringValue(resp.Body.NextToken) != "" { //查询 resp, err = o.ecs.DescribeInstancesWithOptions(describeInstancesRequest, runtime) if err != nil { return nil, nil, err } //处理数据 dosth() //放到后面 describeInstancesRequest.NextToken = resp.Body.NextToken }
放前面,接着查,但是 dosth 要在第一次接受数据后,先dosth一次
//处理数据 dosth() for tea.StringValue(resp.Body.NextToken) != "" { //放到前面 describeInstancesRequest.NextToken = resp.Body.NextToken //查询 resp, err = o.ecs.DescribeInstancesWithOptions(describeInstancesRequest, runtime) if err != nil { return nil, nil, err } //处理数据 dosth() }
共 0 条评论