Menangani penomoran halaman di REST API adalah aspek penting dalam desain API, terutama bagi penyedia API seperti kami. Pagination memungkinkan kami mengelola kumpulan data besar secara efektif, meningkatkan kinerja dan pengalaman pengguna. Di blog ini, kita akan menjelajahi berbagai teknik untuk menangani pagination di REST API, mendiskusikan kelebihan dan kekurangannya, dan memberikan contoh praktis.
Mengapa Paginasi Diperlukan
Saat menangani kumpulan data yang besar, mengembalikan semua data dalam satu respons bisa jadi tidak efisien dan membutuhkan banyak sumber daya. Hal ini dapat menyebabkan waktu respons yang lama, penggunaan memori yang tinggi di sisi server dan klien, dan potensi kemacetan jaringan. Penomoran halaman memecahkan masalah ini dengan membagi kumpulan data menjadi "halaman" yang lebih kecil dan lebih mudah dikelola serta menampilkan halaman satu per satu.
Teknik Paginasi Umum
Offset - Batasi Paginasi
Offset - batas penomoran halaman adalah salah satu teknik yang paling mudah dan umum digunakan. Ini melibatkan penentuan dua parameter:mengimbangiDanmembatasi. Itumengimbangimenunjukkan posisi awal data yang akan diambil, danmembatasimenentukan jumlah maksimum item yang akan dikembalikan dalam respons.
Misalnya, jika kita memiliki titik akhir API/api/produkyang mengembalikan daftar produk, permintaan denganoffset = 20Danbatas = 10akan mengembalikan produk tanggal 21 hingga ke-30.
Berikut ini adalah contoh implementasi Python Flask dalam pagination offset - limit:
dari labu impor Labu, permintaan, jsonify app = Flask(__name__) produk = [{"id": i, "name": f"Produk {i}"} untuk i dalam rentang(100)] @app.route('/api/products', metode=['GET']) def get_products(): offset = int(request.args.get('offset', 0)) limit = int(request.args.get('limit', 10)) paginasi_produk = produk[offset:offset + batas] kembalikan jsonify(produk_paginasi) jika __name__ == '__main__': app.run(debug=True)
Kelebihan:
- Mudah dipahami dan diterapkan.
- Bekerja dengan baik dengan database yang mendukung
MEMBATASIDanMENGIMBANGIklausa, seperti MySQL dan PostgreSQL.
Kontra:
- Sebagai
mengimbanginilainya meningkat, kinerjanya dapat menurun secara signifikan, terutama untuk kumpulan data yang besar. Hal ini karena database harus melewati sejumlah besar baris untuk mencapai offset yang diinginkan. - Mungkin sulit untuk menangani data yang diperbarui selama penomoran halaman, karena offset mungkin tidak lagi menunjuk ke posisi yang benar.
Paginasi Berbasis Kursor
Penomoran halaman berbasis kursor menggunakan pengidentifikasi unik (kursor) untuk menandai posisi dalam kumpulan data. Daripada menentukan offset, klien memberikan nilai kursor dalam permintaan untuk mendapatkan halaman data berikutnya.
Misalnya, jika kita memiliki daftar pengguna yang diurutkan berdasarkan tanggal pembuatannya, kursornya bisa jadi adalah tanggal pembuatan pengguna terakhir di halaman sebelumnya. Server kemudian akan mengembalikan kumpulan pengguna berikutnya dengan tanggal pembuatan lebih besar dari nilai kursor.
Berikut adalah contoh JavaScript sederhana menggunakan Node.js dan Express:
const express = memerlukan('ekspres'); const aplikasi = ekspres(); const pengguna = [ { id: 1, nama: 'Pengguna 1', dibuat_at: '01-01-2023' }, { id: 2, nama: 'Pengguna 2', dibuat_at: '02-01-2023' }, // lebih banyak pengguna... ]; app.get('/api/users', (req, res) => { const kursor = req.query.cursor; const limit = parseInt(req.query.limit) || 10; biarkan startIndex = 0; if (kursor) { startIndex = pengguna.findIndex(pengguna => pengguna.created_at > kursor); } const paginasiUsers = pengguna.slice(startIndex, startIndex + limit); const nextCursor = paginasiUsers.length > 0 ? paginasiUsers[paginasiUsers.length - 1].created_at : null; res.json({ pengguna: paginasiUsers, next_cursor: nextCursor }); app.listen(3000, () => { console.log('Server berjalan pada port 3000'); });
Kelebihan:
- Kinerja yang lebih baik dibandingkan dengan offset - membatasi penomoran halaman, terutama untuk kumpulan data besar. Database tidak perlu melewati banyak baris.
- Lebih tangguh ketika menangani pembaruan data, karena kursor selalu menunjuk ke posisi tertentu dalam kumpulan data.
Kontra:
- Lebih rumit untuk diterapkan, terutama ketika berhadapan dengan beberapa kriteria penyortiran.
- Membutuhkan pengidentifikasi unik dan dapat diurutkan untuk digunakan sebagai kursor.
Paginasi Nomor Halaman
Penomoran halaman nomor halaman mirip dengan penomoran halaman offset - batas, tetapi alih-alih menentukan offset, klien meminta nomor halaman tertentu. Server menghitung offset berdasarkan nomor halaman dan batasnya.
Misalnya, jika batasnya adalah 10 item per halaman, permintaan untuk halaman 3 akan memiliki offset sebesar 20 (karenaoffset = (nomor halaman - 1) * batas).
dari labu impor Labu, permintaan, jsonify app = Flask(__name__) produk = [{"id": i, "name": f"Produk {i}"} untuk i dalam rentang(100)] @app.route('/api/products', metode=['GET']) def get_products(): page = int(request.args.get('page', 1)) limit = int(request.args.get('limit', 10)) offset = (halaman - 1) * limit paginasi_produk = produk[offset:offset + limit] kembalikan jsonify(paginasi_produk) if __name__ == '__main__': app.run(debug=True)
Kelebihan:
- Mudah dipahami pengguna, karena mirip dengan penomoran halaman tradisional di halaman web.
- Sederhana untuk diterapkan.
Kontra:
- Mirip dengan penomoran halaman offset - batas, ini dapat mengalami masalah kinerja seiring bertambahnya jumlah halaman.
- Mungkin sulit menangani pembaruan data selama penomoran halaman.
Pertimbangan untuk Penyedia API
Sebagai penyedia API, kita perlu mempertimbangkan beberapa faktor saat menerapkan penomoran halaman:
Standardisasi
Kita harus mengikuti praktik standar industri untuk penomoran halaman. Ini termasuk penggunaan nama parameter yang konsisten (sepertimengimbangi,membatasi,halaman,kursor), dan memberikan dokumentasi yang jelas tentang cara kerja penomoran halaman.


Metadata
Selain data yang diberi nomor halaman, kita harus menyediakan metadata dalam respons, seperti jumlah total item, jumlah total halaman, dan link halaman berikutnya dan sebelumnya. Ini membantu klien untuk lebih memahami kumpulan data dan menavigasi halaman.
Misalnya, responsnya bisa dalam format berikut:
{ "data": [ { "id": 1, "nama": "Produk 1" }, { "id": 2, "nama": "Produk 2" } ], "total_items": 100, "total_pages": 10, "next_page": "/api/products?offset=20&limit=10", "prev_page": null }
Keamanan
Kita perlu memastikan bahwa parameter penomoran halaman divalidasi dengan benar untuk mencegah injeksi SQL atau kerentanan keamanan lainnya. Misalnya, kita harus mengonversimengimbangiDanmembatasiparameter ke bilangan bulat dan menetapkan batas yang wajar untuk mencegah konsumsi sumber daya yang berlebihan.
Kesimpulan
Menangani penomoran halaman di REST API adalah keterampilan penting bagi penyedia API. Dengan memilih teknik penomoran halaman yang tepat berdasarkan ukuran kumpulan data, persyaratan kinerja, dan pengalaman pengguna, kami dapat menyediakan API yang lebih efisien dan ramah pengguna. Baik Anda berurusan dengan kumpulan data kecil atau aplikasi berskala besar, memahami pro dan kontra dari berbagai metode penomoran halaman sangatlah penting.
Jika Anda tertarik dengan API kami atau memiliki pertanyaan tentang penomoran halaman atau topik terkait API lainnya, jangan ragu untuk menghubungi kami untuk pengadaan dan diskusi lebih lanjut. Kami juga menawarkan berbagai macam produk sepertiMetokarbamol,Azasetron Hidroklorida, DanPirazinamid.
Referensi
- Richardson, Leonard, dan Sam Ruby. Layanan Web yang Tenang. O'Reilly Media, 2007.
- Bank, Adam. Membangun RESTful Web API dengan Python dan Flask. Penerbitan Paket, 2018.
