Sayfalama
- İngilizcesi
- Pagination
- Türkçe karşılığı
- sayfalandırma
- Okunuşu
- pecineyşın
Günlük kullanımda iki ad da yaygın.
Kısaca
Sayfalama, büyük bir sonuç kümesini daha küçük sayfalara bölme uygulamasıdır; böylece bir API veya web sitesi her istekte yönetilebilir sayıda öğe döndürür.
Sayfalama (pagination) nedir?
Sayfalama; ürünler, arama sonuçları ya da mesajlar gibi uzun bir sonuç listesini sayfa adı verilen daha küçük parçalara böler. Bir milyon satırı bir anda döndürmek yavaş olur ve çok fazla bellek kullanır; bunun yerine bir API örneğin 20 öğe döndürür ve sonraki 20'yi isteme yolunu da sunar. Aynı fikir; numaralı sayfa bağlantılarına, 'Daha fazla yükle' düğmelerine ve kullanıcı arayüzlerindeki sonsuz kaydırmaya (infinite scrolling) güç verir.
En yaygın iki teknik offset ve cursor sayfalamadır. Offset sayfalama ?limit=20&offset=40 veya ?page=3 gibi parametreler kullanır ve doğrudan SQL'in LIMIT ve OFFSET ifadeleriyle eşleşir; bu da onu kurmayı kolaylaştırır ve kullanıcıların herhangi bir sayfaya atlamasına olanak tanır. Cursor sayfalama, görülen son öğeyi işaret eden ?cursor=abc123 gibi bir token döndürür ve sonraki istek hemen o öğenin ardından devam eder.
Offset sayfalamanın büyük veya hızlı değişen verilerde iki dezavantajı vardır: veritabanı offset'ten önceki her satırı yine de okuyup atlamak zorundadır, bu yüzden derin sayfalar yavaşlar; ayrıca istekler arasında satır eklendiğinde veya silindiğinde öğeler atlanabilir ya da tekrarlanabilir. İmleç bir ID ya da zaman damgası gibi bir sütun değeri olduğunda keyset sayfalama olarak da adlandırılan cursor sayfalama, doğru yere doğrudan atlamak için bir indeks kullanarak bu iki sorunu da önler. Bedeli, doğrudan 50. sayfaya atlayamamanızdır.
İyi bir benzetme uzun bir kitap okumaktır: offset sayfalama '50. sayfaya git' demek, cursor sayfalama ise araya ayraç koyup oradan devam etmek gibidir. API'ler sonraki sayfanın nasıl alınacağını genellikle yanıtta, bir nextCursor alanı, bir hasMore bayrağı veya bir Link başlığıyla belirtir ve istemcilerin her şeyi bir anda istememesi için sayfa boyutuna üst sınır koyar.
Önemli noktalar
- Sayfalama, büyük sonuç kümelerini daha küçük sayfalar halinde döndürür.
- Offset sayfalama (
limitveoffset) basittir ve herhangi bir sayfaya atlamaya izin verir. - Cursor sayfalama, görülen son öğeden sonra devam eder ve büyük tablolarda hızlı kalır.
- Offset sayfalama, istekler arasında veri değiştiğinde öğeleri atlayabilir ya da tekrarlayabilir.
- API'ler sayfa boyutuna üst sınır koymalı ve istemcilere sonraki sayfanın nasıl alınacağını söylemelidir.
Örnek
-- Offset pagination: page 3 with 20 items per page (skips 40 rows)
SELECT id, title FROM posts
ORDER BY id
LIMIT 20 OFFSET 40;
-- Cursor (keyset) pagination: the next 20 items after the last id seen (1040)
SELECT id, title FROM posts
WHERE id > 1040
ORDER BY id
LIMIT 20;Sık sorulan sorular
Offset ile cursor sayfalama arasındaki fark nedir?
Offset sayfalama öğeleri konumlarına göre ister (örneğin 40'ı atla, 20'yi al); cursor sayfalama ise belirli bir öğeden sonra gelen öğeleri ister. Offset daha basittir ve sayfa numaralarını destekler; cursor büyük veri kümelerinde daha hızlıdır ve veri değiştiğinde öğeleri atlamaz veya tekrarlamaz.
Bir API sayfa başına kaç öğe döndürmelidir?
Yaygın varsayılanlar 20 ile 100 öğe arasındadır ve istemcinin aşamayacağı bir üst sınır vardır. Doğru boyut, yanıt süresi ve yük boyutunu, istemcilerin kaç istek yapması gerektiğiyle dengeler.
Sonsuz kaydırma bir sayfalama türü müdür?
Evet. Sonsuz kaydırma, kullanıcı listenin sonuna yaklaştıkça sonraki sayfayı otomatik yükleyen bir kullanıcı arayüzüdür ve arka planda genellikle cursor sayfalamaya dayanır.
İlgili sayfalar
- REST APIBackend ve API'ler, s. 38REST API, verileri URL'lerle tanımlanan kaynaklar olarak sunan ve istemcilerin onları standart HTTP metotlarıyla okuyup değiştirmesini sağlayan web API'sidir.
- APIBackend ve API'ler, s. 2API, bir yazılımın başka bir yazılımdan veri ya da işlem talep etmesini sağlayan, belgelenmiş ve öngörülebilir kurallar bütünüdür.
- SQLVeritabanları, s. 29SQL, ilişkisel veritabanlarıyla çalışmanın standart dilidir; tablo oluşturmak ve içindeki veriyi eklemek, sorgulamak, güncellemek ve silmek için kullanılır.
- Veritabanı İndeksiVeritabanları, s. 38Veritabanı indeksi, tüm tabloyu taramadan satırları hızla bulmayı sağlayan, bir kitabın sonundaki dizine benzeyen bir veri yapısıdır.
- GraphQLBackend ve API'ler, s. 18GraphQL, istemcilerin tam ihtiyaç duyduğu veriyi, çoğunlukla tek bir endpoint üzerinden tek istekte istemesini sağlayan API sorgu dili ve çalışma zamanıdır.
- EndpointBackend ve API'ler, s. 11Endpoint, bir API'nin belirli bir kaynak veya eylem için istek alıp yanıt döndürdüğü, bir HTTP metoduyla birlikte kullanılan belirli bir URL'dir.
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin