Pagination, Filtering, dan Sorting
Teknik mengelola data besar dalam API response
Pagination
- Membagi data besar menjadi halaman-halaman kecil
- Mencegah response terlalu besar dan lambat
- Umumnya digunakan untuk daftar resource
Offset Pagination
- Menggunakan parameter
pagedanlimit - Contoh:
/users?page=2&limit=10 pagemenunjukkan halaman keberapalimitmenunjukkan jumlah item per halaman
Cursor Pagination
- Menggunakan pointer ke item terakhir sebagai anchor
- Contoh:
/users?cursor=abc123&limit=10 - Lebih andal untuk data yang sering berubah
- Tidak ada masalah item muncul berulang atau terlewat
Response Format dengan Pagination
{
"data": [
{ "id": 11, "nama": "Andi" },
{ "id": 12, "nama": "Budi" }
],
"pagination": {
"total": 100,
"page": 2,
"limit": 10,
"totalPages": 10
}
}Filtering
- Membatasi data berdasarkan kondisi tertentu
- Menggunakan query parameter di URL
- Bisa menggabungkan beberapa filter sekaligus
Contoh Filtering
/users?role=admin— filter berdasarkan role/orders?status=paid&date_from=2024-01-01— filter status dan tanggal/products?category=electronics&price_min=100&price_max=500— range filter
Jenis Filter Umum
- Exact match:
status=paid - Range:
price_min=100&price_max=500 - Partial match:
name=andimencari yang mengandung "andi" - Multiple values:
status=paid,shipped - Date range:
created_after=2024-01-01&created_before=2024-12-31
Sorting
- Mengurutkan data berdasarkan kolom tertentu
- Menggunakan parameter
sortdanorder - Default order harus ditentukan jika tidak dispesifikasikan
Contoh Sorting
/users?sort=nama&order=asc— urut nama naik/orders?sort=created_at&order=desc— urut tanggal terbaru/products?sort=price&order=asc— urut harga termurah
Sorting dengan Banyak Kolom
/users?sort=role,created_at&order=asc,desc- Urut berdasarkan role naik, lalu created_at turun
Kombinasi Pagination, Filter, dan Sort
GET /orders?status=paid&sort=created_at&order=desc&page=1&limit=20- Filter: hanya order yang statusnya paid
- Sort: urut dari yang terbaru
- Pagination: halaman 1, 20 item per halaman
Praktik Terbaik
- Selalu gunakan pagination untuk endpoint yang mengembalikan banyak data
- Tentukan
limitmaksimal untuk mencegah abuse - Gunakan cursor pagination untuk data real-time
- Validasi parameter filter untuk mencegah query yang berbahaya
- Dokumentasikan semua parameter yang didukung
- Berikan default value untuk parameter yang opsional