REST API Sayfalama: Kapsamlı Bir Rehber

Rebecca Kovács

Rebecca Kovács

7 June 2025

REST API Sayfalama: Kapsamlı Bir Rehber

Modern uygulama geliştirme dünyasında, REST API'ler, farklı sistemlerin sorunsuz bir şekilde veri alışverişi yapmasını sağlayan temel iletişim katmanı olarak hizmet verir. Uygulamalar ölçek ve karmaşıklık açısından büyüdükçe, işledikleri veri hacmi de artar. Potansiyel olarak milyonlarca, hatta milyarlarca kayıt içeren tüm bir veri kümesini tek bir API çağrısıyla istemek verimsiz, güvenilmez ve önemli bir performans darboğazıdır. İşte bu noktada API tasarım ve geliştirmede çok önemli bir teknik devreye girer: REST API sayfalandırma (pagination). Bu kılavuz, REST API'lerde sayfalandırmanın uygulanmasına ilişkin, temel kavramlardan Node.js, Python ve .NET gibi çeşitli teknoloji yığınlarını kullanarak gelişmiş gerçek dünya uygulamalarına kadar her şeyi kapsayan derinlemesine ve kapsamlı bir genel bakış sunmaktadır.

💡
Harika API Dokümantasyonu oluşturan müthiş bir API Test aracı mı istiyorsunuz?

Geliştirici Ekibinizin maksimum üretkenlikle birlikte çalışması için entegre, Hepsi Bir Arada bir platform mu istiyorsunuz?

Apidog tüm taleplerinizi karşılar ve Postman'in yerini çok daha uygun bir fiyata alır!
button

REST API Sayfalandırmanın Temelleri

Karmaşık kod örneklerine ve tasarım desenlerine dalmadan önce, sayfalandırmanın ne olduğunu ve neden profesyonel API tasarımının vazgeçilmez bir yönü olduğunu sağlam bir şekilde kavramak önemlidir.

REST API'lerde Sayfalandırma Nedir?

Özünde, REST API sayfalandırma, bir REST API uç noktasının yanıtını alıp onu daha küçük, daha yönetilebilir birimlere, genellikle "sayfalara" ayırmak için kullanılan bir tekniktir. Potansiyel olarak büyük bir veri kümesini tek seferde sunmak yerine, API verinin küçük, öngörülebilir bir parçasını döndürür. En önemlisi, API yanıtı, istemcinin daha fazla veriye ihtiyaç duyması halinde sonraki parçaları artımlı olarak getirmesini sağlayan meta verileri de içerir.

Bu süreç, bir kitabın sayfalarına veya Google'daki arama sonuçlarına benzer. Sonuçların ilk sayfası, ikinci, üçüncü ve diğer sayfalara gitmek için kontrollerle birlikte size sunulur. DEV Community gibi geliştirici toplulukları ve Merge.dev gibi platformların belirttiği gibi, bu, büyük bir veri kümesini daha küçük parçalara ayırma sürecidir ve istemci tüm veriyi gerçekten isterse bu parçalar artımlı olarak getirilebilir. Bu, sağlam ve ölçeklenebilir uygulamalar oluşturmak için temel bir kavramdır.

Modern API Tasarımında Sayfalandırma Neden Temel Bir Gereksinimdir?

Sayfalandırmanın temel motivasyonu, API yanıtlarının hem sunucu hem de istemci için daha kolay yönetilmesini sağlamaktır. Olmasaydı, uygulamalar ciddi sınırlamalar ve kötü bir kullanıcı deneyimiyle karşılaşırdı. Başlıca faydaları şunlardır:

Yaygın Sayfalandırma Stratejileri ve Teknikleri

Sayfalandırmayı uygulamanın çeşitli yolları vardır, ancak sektörde fiili standart haline gelmiş iki temel strateji bulunmaktadır. Bunlar arasındaki seçim, performans, veri tutarlılığı ve kullanıcı deneyimi açısından önemli sonuçlar doğurur.

Offset Tabanlı Sayfalandırma: Temel Yaklaşım

Genellikle "sayfa numarası sayfalandırması" olarak adlandırılan offset tabanlı sayfalandırma, geliştiricilerin sıklıkla öğrendiği ilk yaklaşımdır. Kavramsal olarak basittir ve birçok web uygulamasında görülür. İki ana parametre kullanarak çalışır:

Tipik bir istek şöyle görünür: GET /api/products?limit=25&offset=50

Bu, şu gibi bir SQL sorgusuna dönüşür:SQL

SELECT * FROM products ORDER BY created_at DESC LIMIT 25 OFFSET 50;

Bu sorgu ilk 50 ürünü atlar ve sonraki 25'i getirir (yani 51-75 arası ürünler).

Avantajları:

Dezavantajları ve Sınırlamaları:

İmleç Tabanlı (Keyset) Sayfalandırma: Ölçeklenebilir Çözüm

Keyset veya seek sayfalandırma olarak da bilinen imleç tabanlı sayfalandırma, offset yönteminin performans ve tutarlılık sorunlarını çözer. Bir sayfa numarası yerine, veri kümesindeki belirli bir kaydı işaret eden kararlı, opak bir işaretçi olan bir "imleç" kullanır.

Akış şöyledir:

  1. İstemci, bir sayfa veri için ilk isteği yapar.
  2. Sunucu, o setteki son öğeyi işaret eden bir imleçle birlikte veri sayfasını döndürür.
  3. Sonraki sayfa için istemci, o imleci sunucuya geri gönderir.
  4. Sunucu daha sonra o belirli imleçten sonra gelen kayıtları getirir ve veri kümesinde etkili bir şekilde o noktaya "arama" yapar.

İmleç genellikle sıralama yapılan sütun(lar)dan türetilen kodlanmış bir değerdir. Örneğin, created_at (bir zaman damgası) ile sıralama yapılıyorsa, imleç son kaydın zaman damgası olabilir. Eşitlikleri ele almak için genellikle ikinci, benzersiz bir sütun (kaydın id'si gibi) dahil edilir.

Bir imleç kullanan istek şöyle görünür: GET /api/products?limit=25&after_cursor=eyJjcmVhdGVkX2F0IjoiMjAyNS0wNi0wN1QxODowMDowMC4wMDBaIiwiaWQiOjg0N30=

Bu, çok daha performanslı bir SQL sorgusuna dönüşür:SQL

SELECT * FROM products
WHERE (created_at, id) < ('2025-06-07T18:00:00.000Z', 847)
ORDER BY created_at DESC, id DESC
LIMIT 25;

Bu sorgu, doğru başlangıç noktasına anında "arama" yapmak için (created_at, id) üzerinde bir indeks kullanır, tam tablo taramasını önler ve kullanıcının ne kadar derinlere sayfalandığına bakılmaksızın sürekli olarak hızlı olmasını sağlar.

Avantajları:

Dezavantajları:

İki Ana Sayfalandırma Türünün Karşılaştırılması

Offset ve imleç sayfalandırma arasında seçim yapmak tamamen kullanım senaryosuna bağlıdır.

ÖzellikOffset Sayfalandırmaİmleç Sayfalandırma
PerformansBüyük veri kümelerinde derin sayfalar için zayıf.Her derinlikte mükemmel ve tutarlı.
Veri TutarlılığıVeri kaybı/tekrarına yatkın (sayfa kayması).Yüksek; yeni veriler sayfalandırmayı etkilemez.
GezinmeHerhangi bir sayfaya atlayabilir.Sonraki/önceki sayfalarla sınırlı.
UygulamaBasit ve anlaşılır.Daha karmaşık; imleç mantığı gerektirir.
İdeal Kullanım SenaryosuKüçük, statik veri kümeleri; yönetici kullanıcı arayüzleri.Sonsuz kaydırma akışları; büyük, dinamik veri kümeleri.

Sunucu Tarafı Sayfalandırma İçin Uygulama En İyi Uygulamaları

Seçilen stratejiden bağımsız olarak, bir dizi en iyi uygulamaya bağlı kalmak, temiz, öngörülebilir ve kullanımı kolay bir API ile sonuçlanacaktır. Bu, genellikle "Sunucu tarafı sayfalandırmanın en iyi uygulaması nedir?" sorusunun yanıtının önemli bir parçasıdır.

Sayfalandırma Yanıt Yükünü Tasarlama

Yaygın bir hata, yalnızca bir sonuç dizisi döndürmektir. İyi tasarlanmış bir **sayfalandırma yanıt yükü**, veriyi "saran" ve net sayfalandırma meta verilerini içeren bir nesne olmalıdır.JSON

{
  "data": [
    { "id": 101, "name": "Product A" },
    { "id": 102, "name": "Product B" }
  ],
  "pagination": {
    "next_cursor": "eJjcmVhdGVkX2F0Ij...",
    "has_next_page": true
  }
}

Offset sayfalandırma için meta veriler farklı görünürdü:JSON

{
  "data": [
    // ... results
  ],
  "metadata": {
    "total_results": 8452,
    "total_pages": 339,
    "current_page": 3,
    "per_page": 25
  }
}

Bu yapı, istemcinin getirilecek daha fazla veri olup olmadığını veya kullanıcı arayüzü kontrollerini işlemesi gerektiğini bilmesini kolaylaştırır.

Gezinme İçin Hipermedya Bağlant

API Tasarım-Öncelikli Yaklaşımı Apidog'da Uygulayın

API'leri oluşturmanın ve kullanmanın daha kolay yolunu keşfedin