Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Artikel ini memberikan gambaran umum tentang cara menggunakan Azure SDK untuk paginasi Java dan fungsionalitas iterasi untuk bekerja secara efisien dan produktif dengan himpunan data besar.
Banyak operasi yang disediakan oleh pustaka klien dalam Azure Java SDK mengembalikan lebih dari satu hasil. Azure Java SDK menentukan serangkaian jenis pengembalian yang dapat diterima dalam kasus ini untuk memastikan bahwa pengalaman pengembang dimaksimalkan melalui konsistensi. Jenis pengembalian yang digunakan adalah PagedIterable untuk API sinkronisasi dan PagedFlux untuk API asinkron. API sedikit berbeda karena kasus penggunaannya yang berbeda, tetapi secara konseptual mereka memiliki persyaratan yang sama:
Memungkinkan iterasi dengan mudah atas setiap elemen dalam koleksi secara individu, tanpa perlu repot dengan penomoran halaman manual atau pelacakan token lanjutan. Baik
PagedIterabledanPagedFluxbuat tugas ini mudah dengan melakukan iterasi melalui respons paginated yang dideserialisasi ke dalam jenisTtertentu .PagedIterablemengimplementasikan antarmukaIterable, dan menawarkan API untuk menerimaStream, sementaraPagedFluxmenyediakanFlux. Dalam semua kasus, proses paginasi bersifat transparan, dan iterasi berlanjut selama masih ada hasil untuk diiterasi.Memungkinkan untuk melakukan iterasi secara eksplisit halaman demi halaman. Melakukannya memungkinkan Anda memahami lebih jelas ketika permintaan dibuat, dan memungkinkan Anda mengakses informasi respons per halaman.
PagedIterabledanPagedFluxkeduanya memiliki metode yang akan mengembalikan jenis yang sesuai untuk mengiterasi berdasarkan halaman, bukan berdasarkan elemen individual.
Artikel ini dibagi antara API sinkron dan asinkron Java Azure SDK. Anda akan melihat API iterasi sinkron saat bekerja dengan klien sinkron, dan API iterasi asinkron saat bekerja dengan klien asinkron.
Paginasi dan iterasi sinkron
Bagian ini mencakup API sinkron.
Ulangi pada elemen individual
Seperti disebutkan, kasus penggunaan yang paling umum adalah melakukan iterasi pada setiap elemen satu per satu, bukan per halaman. Contoh kode berikut menunjukkan bagaimana PagedIterable API memungkinkan Anda menggunakan gaya iterasi yang Anda sukai untuk mengimplementasikan fungsionalitas ini.
Menggunakan perulangan for-each
Karena PagedIterable mengimplementasikan Iterable, Anda dapat melakukan iterasi melalui elemen seperti yang ditunjukkan dalam contoh berikut:
PagedIterable<Secret> secrets = client.listSecrets();
for (Secret secret : secrets) {
System.out.println("Secret is: " + secret);
}
Gunakan Streaming
Karena PagedIterable memiliki metode stream() yang ditentukan, Anda dapat memanggilnya untuk menggunakan API Java Stream standar, seperti yang ditunjukkan dalam contoh berikut:
client.listSecrets()
.stream()
.forEach(secret -> System.out.println("Secret is: " + secret));
Gunakan Iterator
Karena PagedIterable mengimplementasikan Iterable, ini juga memiliki iterator() metode untuk memungkinkan gaya pemrograman iterator Java, seperti yang ditunjukkan dalam contoh berikut:
Iterator<Secret> secrets = client.listSecrets().iterator();
while (it.hasNext()) {
System.out.println("Secret is: " + it.next());
}
Iterasi di atas halaman
Saat Anda bekerja dengan halaman individual, Anda dapat melakukan iterasi per halaman, misalnya ketika Anda memerlukan informasi respons HTTP, atau ketika token kelanjutan penting untuk mempertahankan riwayat iterasi. Terlepas dari apakah Anda melakukan iterasi berdasarkan halaman atau setiap item, tidak ada perbedaan performa atau jumlah panggilan yang dilakukan ke layanan. Implementasi yang mendasar memuat halaman berikutnya sesuai permintaan, dan jika Anda berhenti berlangganan dari PagedFlux kapan saja, tidak ada panggilan lebih lanjut ke layanan.
Menggunakan perulangan for-each
Ketika Anda memanggil listSecrets(), Anda mendapatkan PagedIterable, yang memiliki iterableByPage() API. API ini menghasilkan Iterable<PagedResponse<Secret>> alih-alih Iterable<Secret>.
PagedResponse menyediakan metadata respons dan akses ke token kelanjutan, seperti yang ditunjukkan dalam contoh berikut:
Iterable<PagedResponse<Secret>> secretPages = client.listSecrets().iterableByPage();
for (PagedResponse<Secret> page : secretPages) {
System.out.println("Response code: " + page.getStatusCode());
System.out.println("Continuation Token: " + page.getContinuationToken());
page.getElements().forEach(secret -> System.out.println("Secret value: " + secret))
}
Ada juga iterableByPage kelebihan beban yang menerima token kelanjutan. Anda dapat memanggil kelebihan beban ini ketika Anda ingin kembali ke titik iterasi yang sama di lain waktu.
Gunakan Streaming
Contoh berikut menunjukkan bagaimana metode streamByPage() melakukan operasi yang sama seperti yang ditunjukkan di atas. API ini juga memiliki kelebihan token kelanjutan untuk kembali ke titik iterasi yang sama di lain waktu.
client.listSecrets()
.streamByPage()
.forEach(page -> {
System.out.println("Response code: " + page.getStatusCode());
System.out.println("Continuation Token: " + page.getContinuationToken());
page.getElements().forEach(secret -> System.out.println("Secret value: " + secret))
});
Mengamati halaman dan elemen individual secara asinkron
Bagian ini mencakup API asinkron. Dalam API asinkron, panggilan jaringan terjadi di utas yang berbeda dari utas utama yang memanggil subscribe(). Artinya, utas utama dapat berakhir sebelum hasilnya tersedia. Terserah Anda untuk memastikan bahwa aplikasi tidak keluar sebelum operasi asinkron memiliki waktu untuk diselesaikan.
Mengamati elemen individu
Contoh berikut menunjukkan bagaimana PagedFlux API memungkinkan Anda mengamati elemen individual secara asinkron. Ada berbagai cara untuk berlangganan tipe Flux. Untuk informasi selengkapnya, lihat Cara Sederhana Untuk Membuat Fluks atau Mono dan Berlangganannya di Panduan Referensi Reaktor 3. Contoh ini adalah satu variasi di mana ada tiga ekspresi lambda, masing-masing satu untuk konsumen, konsumen kesalahan, dan konsumen lengkap. Memiliki ketiganya adalah praktik yang baik, tetapi dalam beberapa kasus hanya perlu memiliki konsumen, dan mungkin konsumen kesalahan.
asyncClient.listSecrets()
.subscribe(secret -> System.out.println("Secret value: " + secret),
ex -> System.out.println("Error listing secrets: " + ex.getMessage()),
() -> System.out.println("Successfully listed all secrets"));
Amati halaman
Contoh berikut menunjukkan bagaimana PagedFlux API memungkinkan Anda mengamati setiap halaman secara asinkron, sekali lagi dengan menggunakan byPage() API dan dengan menyediakan konsumen, konsumen kesalahan, dan konsumen penyelesaian.
asyncClient.listSecrets().byPage()
.subscribe(page -> {
System.out.println("Response code: " + page.getStatusCode());
System.out.println("Continuation Token: " + page.getContinuationToken());
page.getElements().forEach(secret -> System.out.println("Secret value: " + secret))
},
ex -> System.out.println("Error listing pages with secret: " + ex.getMessage()),
() -> System.out.println("Successfully listed all pages with secret"));
Langkah selanjutnya
Sekiranya Anda terbiasa dengan paging dan iterasi di Azure SDK untuk Java, pertimbangkan untuk meninjau proses yang berjalan dalam waktu lama di Azure SDK untuk Java. Operasi yang berjalan lama adalah operasi yang berjalan untuk durasi yang lebih lama daripada sebagian besar permintaan HTTP normal, biasanya karena memerlukan beberapa upaya di sisi server.