Recraftory

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 page dan limit
  • Contoh: /users?page=2&limit=10
  • page menunjukkan halaman keberapa
  • limit menunjukkan 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=andi mencari 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 sort dan order
  • 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 limit maksimal 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