API Sayfalaması: Offset-Limit vs Cursor İmleci Nasıl Çalışır?

# API Sayfalaması: Offset-Limit vs Cursor İmleci

Bir API'den 1 milyon kaydı bir kerede çekemezsin. Veritabanı çöker, ağ bağlantısı kopabilir. Bu yüzden verileri parçalara bölerek göndeririz. Ama nasıl böleceğiz? İki yöntem var.

En basit yöntemdir. "Baştan 20. kaydından sonra 10 kayıt ver" anlamına gelir.

Nasıl çalışır:
- `offset=20` 20. kaydı atla
- `limit=10` sonra 10 kayıt getir

1GET /api/users?offset=0&limit=10
2// Çıktı: 1-10. kullanıcılar
3
4GET /api/users?offset=10&limit=10
5// Çıktı: 11-20. kullanıcılar
6
7GET /api/users?offset=20&limit=10
8// Çıktı: 21-30. kullanıcılar

Avantajı: Anlaşılması kolay, herhangi bir sayfaya direkt gidebilirsin.

Sorunu: Veritabanı her seferinde baştan 20 kaydı sayıyor, sonra atıyor. Veri çoksa çok yavaş olur.

Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası

Bir işaretçi (cursor) kullanarak "son gördüğün yerden devam et" dersin.

Nasıl çalışır:
- İlk istek: cursor yok, ilk 10 kayıt gelir
- Cevap: son kaydın ID'sini next_cursor olarak döner
- İkinci istek: next_cursor değerini gönderirsin

1GET /api/users?limit=10
2// Çıktı:
3{
4"data": [{"id": 1, "name": "Ali"},...],
5"next_cursor": "eyJpZCI6IDEwfQ==" // Base64 encoded
6}
7
8GET /api/users?limit=10&cursor=eyJpZCI6IDEwfQ=="
9// Çıktı:
10{
11"data": [{"id": 11, "name": "Veli"},...],
12"next_cursor": "eyJpZCI6IDIwfQ=="
13}

Avantajı: Veritabanı sadece son konumdan devam eder. Çok hızlı ve ölçeklenebilir.

Sorunu: Direkt 100. sayfaya gidemezsin. Sırayla gitmek zorundasın.

- Offset-limit: Küçük veri (1000 kayıt), sayfalama gösterimi (1, 2, 3... sayfalar) gerekiyorsa.
- Cursor: Büyük veri, sonsuz kaydırma (infinite scroll), gerçek zamanlı akış için.

Modern uygulamalar (Twitter, Instagram) cursor kullanır. Eski web siteleri offset-limit kullanır.

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz
  • joksdy
    @joksdy

    offset-limit basit ama veri çoksa gerçekten ölür, her seferinde baştan sayması çok saçma.

  • birazsessiz

    cursor daha mantıklı geliyor çünkü veritabanı sürekli baştan sayıp durmuyor, bir yerden devam ediyor.

  • gecikmisposta

    cursor kullanırken de bir sorun var ya mesela veri siliniyor arası dönemde ne oluyor offset limitten farklı mı

  • kahvaltidansonra

    cursor da silme problemi var ama offset limitten farklı şekilde.