

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# AWS SDK for Rust でページ分割された結果を使用する
<a name="paginating"></a>

多くの AWS オペレーションでは、ペイロードが大きすぎて 1 回の応答では返せない場合に、結果を一部切り捨てて返します。代わりに、サービスはデータの一部とトークンを返し、次の項目のセットを取得します。このパターンは、ページ分割と呼ばれています。

AWS SDK for Rust には、自動的に結果をページ分割するために使用できるオペレーションビルダーの拡張機能メソッド `into_paginator` が含まれています。ユーザーは、この結果を処理するコードを記述するだけで済みます。すべてのページ分割オペレーションビルダーには `into_paginator()` メソッドがあり、結果をページ分割するために [https://docs.rs/aws-smithy-async/latest/aws_smithy_async/future/pagination_stream/struct.PaginationStream.html](https://docs.rs/aws-smithy-async/latest/aws_smithy_async/future/pagination_stream/struct.PaginationStream.html) を公開します。
+ Amazon S3 では、その一例として [https://docs.rs/aws-sdk-s3/latest/aws_sdk_s3/operation/list_objects_v2/builders/struct.ListObjectsV2FluentBuilder.html#method.into_paginator](https://docs.rs/aws-sdk-s3/latest/aws_sdk_s3/operation/list_objects_v2/builders/struct.ListObjectsV2FluentBuilder.html#method.into_paginator) があります。

次の例では、Amazon Simple Storage Service を使用しています。ただし、ページ分割された API を 1 つ以上持つサービスについては同じ概念です。

 次のコード例は、[https://docs.rs/aws-smithy-async/latest/aws_smithy_async/future/pagination_stream/struct.PaginationStream.html#method.try_collect](https://docs.rs/aws-smithy-async/latest/aws_smithy_async/future/pagination_stream/struct.PaginationStream.html#method.try_collect) メソッドを使用してページ分割されたすべての結果を `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);
    }
}
```