Paginator - AWS SDK for .NET

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Paginator

Beberapa AWS layanan mengumpulkan dan menyimpan sejumlah besar data, yang dapat Anda ambil dengan menggunakan API panggilan. AWS SDK for .NETJika jumlah data yang ingin Anda ambil menjadi terlalu besar untuk satu API panggilan, Anda dapat memecah hasilnya menjadi potongan-potongan yang lebih mudah dikelola melalui penggunaan pagination.

Untuk memungkinkan Anda melakukan pagination, objek permintaan dan respons untuk banyak klien layanan dalam SDK menyediakan token kelanjutan (biasanya bernamaNextToken). Beberapa klien layanan ini juga menyediakan paginator.

Paginator memungkinkan Anda untuk menghindari overhead token lanjutan, yang mungkin melibatkan loop, variabel status, beberapa API panggilan, dan sebagainya. Bila Anda menggunakan paginator, Anda dapat mengambil data dari AWS layanan melalui satu baris kode, deklarasi foreach loop. Jika beberapa API panggilan diperlukan untuk mengambil data, paginator menangani ini untuk Anda.

Di mana saya menemukan paginator?

Tidak semua layanan menyediakan paginator. Salah satu cara untuk menentukan apakah layanan menyediakan paginator untuk tertentu API adalah dengan melihat definisi kelas klien layanan di Referensi.AWS SDK for .NET API

Misalnya, jika Anda memeriksa definisi untuk AmazonCloudWatchLogsClientkelas, Anda melihat Paginators properti. Ini adalah properti yang menyediakan paginator untuk Amazon CloudWatch Logs.

Apa yang diberikan paginator kepada saya?

Paginator berisi properti yang memungkinkan Anda melihat respons lengkap. Mereka juga biasanya berisi satu atau lebih properti yang memungkinkan Anda mengakses bagian paling menarik dari tanggapan, yang akan kami sebut hasil utama.

Misalnya, dalam yang AmazonCloudWatchLogsClient disebutkan sebelumnya, Paginator objek berisi Responses properti dengan DescribeLogGroupsResponseobjek penuh dari API panggilan. ResponsesProperti ini berisi, antara lain, kumpulan grup log.

Objek Paginator juga berisi satu hasil kunci bernama. LogGroups Properti ini hanya menyimpan bagian log grup dari respons. Memiliki hasil kunci ini memungkinkan Anda untuk mengurangi dan menyederhanakan kode Anda dalam banyak keadaan.

Pagination sinkron vs. asinkron

Paginator menyediakan mekanisme sinkron dan asinkron untuk pagination. Pagination sinkron tersedia di. NETFramework 4.7.2 (atau yang lebih baru) proyek. Pagination asinkron tersedia di. NETProyek inti (. NETInti 3.1,. NET5, dan sebagainya).

Karena operasi asinkron dan. NETInti direkomendasikan, contoh yang muncul berikutnya menunjukkan pagination asinkron Anda. Informasi tentang cara melakukan tugas yang sama menggunakan pagination sinkron dan. NETFramework 4.7.2 (atau yang lebih baru) ditampilkan setelah contoh di. Pertimbangan tambahan untuk paginator

Contoh

Contoh berikut menunjukkan cara menggunakan AWS SDK for .NET untuk menampilkan daftar grup log. Sebagai kontras, contoh menunjukkan bagaimana melakukan ini baik dengan maupun tanpa paginator. Sebelum melihat kode lengkap, ditampilkan nanti, pertimbangkan cuplikan berikut.

Mendapatkan grup CloudWatch log tanpa paginator

// Loop as many times as needed to get all the log groups var request = new DescribeLogGroupsRequest{Limit = LogGroupLimit}; do { Console.WriteLine($"Getting up to {LogGroupLimit} log groups..."); var response = await cwClient.DescribeLogGroupsAsync(request); foreach(var logGroup in response.LogGroups) { Console.WriteLine($"{logGroup.LogGroupName}"); } request.NextToken = response.NextToken; } while(!string.IsNullOrEmpty(request.NextToken));

Mendapatkan grup CloudWatch log dengan menggunakan paginator

// No need to loop to get all the log groups--the SDK does it for us behind the scenes var paginatorForLogGroups = cwClient.Paginators.DescribeLogGroups(new DescribeLogGroupsRequest()); await foreach(var logGroup in paginatorForLogGroups.LogGroups) { Console.WriteLine(logGroup.LogGroupName); }

Hasil dari kedua cuplikan ini persis sama, sehingga keuntungan dalam menggunakan paginator dapat dilihat dengan jelas.

catatan

Sebelum Anda mencoba membangun dan menjalankan kode lengkap, pastikan Anda telah menyiapkan lingkungan dan proyek Anda.

Anda mungkin juga membutuhkan Microsoft.Bcl. AsyncInterfaces NuGet paket karena paginator asinkron menggunakan antarmuka. IAsyncEnumerable

Kode lengkap

Bagian ini menunjukkan referensi yang relevan dan kode lengkap untuk contoh ini.

using System; using System.Threading.Tasks; using Amazon.CloudWatchLogs; using Amazon.CloudWatchLogs.Model; namespace CWGetLogGroups { class Program { // A small limit for demonstration purposes private const int LogGroupLimit = 3; // // Main method static async Task Main(string[] args) { var cwClient = new AmazonCloudWatchLogsClient(); await DisplayLogGroupsWithoutPaginators(cwClient); await DisplayLogGroupsWithPaginators(cwClient); } // // Method to get CloudWatch log groups without paginators private static async Task DisplayLogGroupsWithoutPaginators(IAmazonCloudWatchLogs cwClient) { Console.WriteLine("\nGetting list of CloudWatch log groups without using paginators..."); Console.WriteLine("------------------------------------------------------------------"); // Loop as many times as needed to get all the log groups var request = new DescribeLogGroupsRequest{Limit = LogGroupLimit}; do { Console.WriteLine($"Getting up to {LogGroupLimit} log groups..."); DescribeLogGroupsResponse response = await cwClient.DescribeLogGroupsAsync(request); foreach(LogGroup logGroup in response.LogGroups) { Console.WriteLine($"{logGroup.LogGroupName}"); } request.NextToken = response.NextToken; } while(!string.IsNullOrEmpty(request.NextToken)); } // // Method to get CloudWatch log groups by using paginators private static async Task DisplayLogGroupsWithPaginators(IAmazonCloudWatchLogs cwClient) { Console.WriteLine("\nGetting list of CloudWatch log groups by using paginators..."); Console.WriteLine("-------------------------------------------------------------"); // Access the key results; i.e., the log groups // No need to loop to get all the log groups--the SDK does it for us behind the scenes Console.WriteLine("\nFrom the key results..."); Console.WriteLine("------------------------"); IDescribeLogGroupsPaginator paginatorForLogGroups = cwClient.Paginators.DescribeLogGroups(new DescribeLogGroupsRequest()); await foreach(LogGroup logGroup in paginatorForLogGroups.LogGroups) { Console.WriteLine(logGroup.LogGroupName); } // Access the full response // Create a new paginator, do NOT reuse the one from above Console.WriteLine("\nFrom the full response..."); Console.WriteLine("--------------------------"); IDescribeLogGroupsPaginator paginatorForResponses = cwClient.Paginators.DescribeLogGroups(new DescribeLogGroupsRequest()); await foreach(DescribeLogGroupsResponse response in paginatorForResponses.Responses) { Console.WriteLine($"Content length: {response.ContentLength}"); Console.WriteLine($"HTTP result: {response.HttpStatusCode}"); Console.WriteLine($"Metadata: {response.ResponseMetadata}"); Console.WriteLine("Log groups:"); foreach(LogGroup logGroup in response.LogGroups) { Console.WriteLine($"\t{logGroup.LogGroupName}"); } } } } }

Pertimbangan tambahan untuk paginator

  • Paginator tidak dapat digunakan lebih dari sekali

    Jika Anda membutuhkan hasil AWS paginator tertentu di beberapa lokasi dalam kode Anda, Anda tidak boleh menggunakan objek paginator lebih dari sekali. Sebagai gantinya, buat paginator baru setiap kali Anda membutuhkannya. Konsep ini ditunjukkan dalam contoh kode sebelumnya dalam metode. DisplayLogGroupsWithPaginators

  • pagination sinkron

    Pagination sinkron tersedia untuk. NETFramework 4.7.2 (atau yang lebih baru) proyek.

    Awas

    Mulai 15 Agustus 2024, dukungan AWS SDK for .NET akan berakhir untuk. NETFramework 3.5 dan akan mengubah minimum. NETVersi kerangka ke 4.7.2. Untuk informasi lebih lanjut, lihat posting blog Perubahan penting yang akan datang. NETFramework 3.5 dan 4.5 target dari AWS SDK for .NET.

    Untuk melihat ini, buat. NETProyek Framework 4.7.2 (atau yang lebih baru) dan salin kode sebelumnya ke sana. Kemudian cukup hapus await kata kunci dari dua panggilan foreach paginator, seperti yang ditunjukkan pada contoh berikut.

    /*await*/ foreach(var logGroup in paginatorForLogGroups.LogGroups) { Console.WriteLine(logGroup.LogGroupName); }

    Bangun dan jalankan proyek untuk melihat hasil yang sama yang Anda lihat dengan pagination asinkron.