Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Paginasi
Banyak AWS operasi mengembalikan hasil terpotong ketika muatan terlalu besar untuk dikembalikan dalam satu respons. Sebagai gantinya, layanan mengembalikan sebagian data dan token untuk mengambil set item berikutnya. Pola ini dikenal sebagai pagination.
AWS SDK for Rust Termasuk metode ekstensi into_paginator
pada pembuat operasi yang dapat digunakan untuk memberi halaman hasil secara otomatis untuk Anda. Anda hanya perlu menulis kode yang memproses hasilnya. Semua pembuat operasi pagination memiliki into_paginator()
metode yang tersedia yang mengekspos a PaginationStream<Item>
-
Di Amazon S3, salah satu contohnya adalah.
aws_sdk_s3::operation::list_objects_v2::builders::ListObjectsV2FluentBuilder::into_paginator
Contoh berikut menggunakan Amazon Simple Storage Service. Namun, konsepnya sama untuk layanan apa pun yang memiliki satu atau lebih paginasi APIs.
Contoh kode berikut menunjukkan contoh paling sederhana yang menggunakan 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<_>>();
Terkadang, Anda ingin memiliki kontrol lebih besar atas paging dan tidak menarik semuanya ke dalam memori sekaligus. Contoh berikut mengulangi objek dalam bucket Amazon S3 hingga tidak ada lagi.
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); } }