API’lerle çalışırken büyük veri kümelerini verimli bir şekilde işlemek çok önemlidir. Tüm verileri bir kerede çekmek hem sunucuyu hem de uygulamanızı aşırı yükleyebilir. Sayfalama, verileri daha küçük, yönetilebilir parçalar halinde alarak bu sorunu çözer. Bu makale, Python’ın requests
kütüphanesini kullanarak çeşitli sayfalama stratejilerini, sunucu tarafı mantığına odaklanarak ele almaktadır.
İçindekiler
- Sayfalama Nedir?
- “Sonraki” Düğmesiyle Sayfalama
- Offset ve Limit ile Sayfalama
- İmleç Tabanlı Sayfalama
Sayfalama Nedir?
Sayfalama, tek bir büyük yanıt yerine, bir API’den verileri daha küçük, ardışık sayfalarda alma tekniğidir. Her sayfa, sayfa numarası, offset, imleç veya diğer benzersiz bir tanımlayıcıyla tanımlanan verilerin bir alt kümesini içerir. Bu, performansı artırır, bellek kullanımını azaltır ve özellikle büyük veri kümeleriyle kullanıcı deneyimini geliştirir.
“Sonraki” Düğmesiyle Sayfalama
Birçok API, basit bir “sonraki” düğmesi yaklaşımı kullanır. API yanıtı, sonraki sayfaya işaret eden bir URL (genellikle bir JSON yanıtında) içerir. “Sonraki” URL null veya yok olana kadar bu devam eder.
import requests
def paginate_next_button(base_url):
all_data = []
url = base_url
while url:
response = requests.get(url)
response.raise_for_status()
data = response.json()
all_data.extend(data.get('results', [])) #'results' anahtarının eksik olabileceği durumları ele alır
url = data.get('next')
return all_data
# Örnek (API uç noktanızı değiştirin)
base_url = "https://api.example.com/data?page=1"
all_data = paginate_next_button(base_url)
print(all_data)
Offset ve Limit ile Sayfalama
Bazı API’ler offset
ve limit
gibi parametreler kullanır. offset
başlangıç noktasını, limit
ise sayfa başına öğe sayısını tanımlar. Toplam öğe sayısını ayrı olarak belirlemeniz gerekebilir (örneğin, özel bir API çağrısından veya X-Total-Count
gibi bir başlıktan).
import requests
def paginate_offset_limit(base_url, limit=10):
all_data = []
offset = 0
while True:
url = f"{base_url}&offset={offset}&limit={limit}"
response = requests.get(url)
response.raise_for_status()
data = response.json()
results = data.get('results', [])
if not results: #Sayfanın boş olup olmadığını kontrol eder
break
all_data.extend(results)
offset += limit
return all_data
# Örnek (API uç noktanızı değiştirin)
base_url = "https://api.example.com/data"
all_data = paginate_offset_limit(base_url, limit=20)
print(all_data)
İmleç Tabanlı Sayfalama
İmleç tabanlı sayfalama, sonraki sayfayı tanımlamak için benzersiz bir imleç değeri kullanır. Bu, büyük veri kümeleri için offset tabanlı sayfalamadan daha verimlidir, çünkü offset’lerin yeniden hesaplanmasına gerek kalmaz. API yanıtı, sonraki sayfa için imleci sağlar.
import requests
def paginate_cursor(base_url):
all_data = []
url = base_url
while url:
response = requests.get(url)
response.raise_for_status()
data = response.json()
all_data.extend(data.get('results', []))
url = data.get('next_cursor') # Yanıttaki gerçek anahtar adına göre uyarlayın
return all_data
# Örnek (API uç noktanızı değiştirin)
base_url = "https://api.example.com/data?cursor=" #Başlangıç imleci boş veya belirli bir değer olabilir
all_data = paginate_cursor(base_url)
print(all_data)
Bu kod parçalarını, belirli API’nizin yapısına ve yanıt biçimine göre uyarlamayı unutmayın. Doğru sayfalama parametreleri ve yanıt yapısı için her zaman API belgelerine danışın. Sağlam uygulamalar için kapsamlı hata işleme çok önemlidir.