API Interaction

Maîtriser la pagination des API avec les requêtes Python

Spread the love

La gestion efficace de grands ensembles de données est cruciale lors de l’utilisation d’API. Récupérer toutes les données en une seule fois peut surcharger à la fois le serveur et votre application. La pagination résout ce problème en récupérant les données par petits morceaux faciles à gérer. Cet article explore différentes stratégies de pagination utilisant la bibliothèque requests de Python, en se concentrant sur la logique côté serveur.

Table des matières

Qu’est-ce que la pagination ?

La pagination est la technique de récupération de données depuis une API en pages séquentielles plus petites plutôt qu’en une seule réponse massive. Chaque page contient un sous-ensemble des données, identifié par un numéro de page, un décalage, un curseur ou un autre identifiant unique. Cela améliore les performances, réduit l’utilisation de la mémoire et améliore l’expérience utilisateur, notamment avec les grands ensembles de données.

Pagination avec un bouton « Suivant »

De nombreuses API utilisent une approche simple avec un bouton « suivant ». La réponse de l’API inclut une URL (souvent dans une réponse JSON) pointant vers la page suivante. Cela continue jusqu’à ce que l’URL « suivante » soit nulle ou absente.


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', [])) #Gestion des cas où la clé 'results' pourrait être manquante
        url = data.get('next')
    return all_data

# Exemple (remplacez par votre point de terminaison API)
base_url = "https://api.example.com/data?page=1"
all_data = paginate_next_button(base_url)
print(all_data)

Pagination avec décalage et limite

Certaines API utilisent des paramètres comme offset et limit. offset spécifie le point de départ, et limit définit le nombre d’éléments par page. Vous devrez peut-être déterminer séparément le nombre total d’éléments (par exemple, à partir d’un appel d’API dédié ou d’un en-tête comme X-Total-Count).


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:  #Vérification si la page est vide
            break
        all_data.extend(results)
        offset += limit
    return all_data

# Exemple (remplacez par votre point de terminaison API)
base_url = "https://api.example.com/data"
all_data = paginate_offset_limit(base_url, limit=20)
print(all_data)

Pagination basée sur un curseur

La pagination basée sur un curseur utilise une valeur de curseur unique pour identifier la page suivante. Ceci est souvent plus efficace que la pagination basée sur un décalage pour les grands ensembles de données, car elle évite le besoin de recalculer les décalages. La réponse de l’API fournit le curseur pour la page suivante.


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') # Adaptez au nom de la clé réelle dans la réponse
    return all_data

# Exemple (remplacez par votre point de terminaison API)
base_url = "https://api.example.com/data?cursor=" #Le curseur initial peut être vide ou une valeur spécifique
all_data = paginate_cursor(base_url)
print(all_data)

N’oubliez pas d’adapter ces extraits de code à la structure et au format de réponse spécifiques de votre API. Consultez toujours la documentation de l’API pour connaître les paramètres de pagination et la structure de réponse corrects. Une gestion minutieuse des erreurs est essentielle pour des applications robustes.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *