API Interaction

Python Requests ile API Sayfalama Ustalığı

Spread the love

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?

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.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir