分页 - AWS SDK for Rust

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

分页

当有效载荷太大而无法在单个响应中返回时,许多 AWS 操作都会返回截断的结果。相反,该服务会返回一部分数据和一个用于检索下一组项目的令牌。这种模式被称为分页。

AWS SDK for Rust 包含操作生成器into_paginator上的扩展方法,可用于为您自动对结果进行分页。您只需要编写处理结果的代码即可。所有分页操作生成器都有一种into_paginator()方法可以公开对结果PaginationStream<Item>进行分页。

以下示例使用 Amazon 简单存储服务。但是,对于任何具有一个或多个分页 APIs的服务,其概念都是一样的。

以下代码示例显示了使用该try_collect()方法将所有分页结果收集到 a Vec 的最简单示例:

let config = aws_config::defaults(BehaviorVersion::latest()) .load() .await; let s3 = aws_sdk_s3::Client::new(&config); let all_objects = s3.list_objects_v2() .bucket("my-bucket") .into_paginator() .send() .try_collect() .await? .into_iter() .flat_map(|o| o.contents.unwrap_or_default()) .collect::<Vec<_>>();

有时,你想更好地控制分页,而不是同时将所有内容全部放入内存。以下示例遍历 Amazon S3 存储桶中的对象,直到没有其他对象。

let config = aws_config::defaults(BehaviorVersion::latest()) .load() .await; let s3 = aws_sdk_s3::Client::new(&config); let mut paginator = s3.list_objects_v2() .bucket("my-bucket") .into_paginator() // customize the page size (max results per/response) .page_size(10) .send(); println!("Objects in bucket:"); while let Some(result) = paginator.next().await { let resp = result?; for obj in resp.contents() { println!("\t{:?}", obj); } }