Leçon 11 / 15

Vérifier et décoder la réponse

20 min Python — modules, erreurs et données Gratuit

Objectif : Contrôler le statut HTTP et extraire le taux de change attendu depuis le corps JSON reçu.

Une requête HTTP peut recevoir une réponse sans que l’API ait fourni les données attendues. Si vous lisez directement son contenu, un statut d’erreur ou un format inattendu risque de produire un résultat trompeur. Vous allez vérifier le statut avant de décoder le JSON, puis extraire le taux demandé.

Vérifier le statut avant de lire les données

Dans la leçon précédente, vous avez construit une requête GET avec un délai d’attente et obtenu une réponse brute. Cette réponse contient notamment un statut HTTP et un corps. La méthode raise_for_status() signale les statuts d’erreur HTTP en levant une exception ; appelez-la avant de lire les données pour ne pas traiter une réponse d’erreur comme un résultat valide.

Après cette vérification, response.json() décode le corps JSON et retourne des objets Python, ici des dictionnaires imbriqués. L’API Frankfurter renvoie le taux dans le dictionnaire rates, sous une clé correspondant à la devise cible. La fonction ci-dessous renvoie ce taux sous forme de nombre.

Mettre à jour depenses/change.py

Conservez obtenir_reponse_taux et ajoutez une fonction qui transforme la réponse brute en taux. Le bloc principal appelle cette nouvelle fonction et affiche le résultat. Le code suppose que l’API a renvoyé le format attendu : le traitement détaillé des réponses mal formées et des pannes sera étudié plus loin.

depenses/change.pyTexte
import requests


URL_API = "https://api.frankfurter.app/latest"


def obtenir_reponse_taux(source="EUR", cible="USD"):
    """Envoie une requête et retourne la réponse HTTP brute."""
    reponse = requests.get(
        URL_API,
        params={"from": source, "to": cible},
        timeout=5,
    )
    return reponse


def obtenir_taux(source="EUR", cible="USD"):
    """Vérifie la réponse et retourne le taux de la devise cible."""
    reponse = obtenir_reponse_taux(source, cible)
    reponse.raise_for_status()
    donnees = reponse.json()
    return float(donnees["rates"][cible])


if __name__ == "__main__":
    taux = obtenir_taux()
    print(f"1 EUR = {taux:.4f} USD")
Résultat attendu
1 EUR = 1.08 USD

Le taux exact peut varier selon la date à laquelle vous exécutez la requête.

L’appel à raise_for_status() précède le décodage : si le serveur répond par un statut HTTP d’erreur, l’exécution s’arrête à cette étape. Avec une réponse réussie, response.json() produit un dictionnaire dont la clé rates contient le taux demandé. La conversion avec float() fournit un nombre utilisable dans la suite du programme.

Exécuter le module

Depuis la racine du projet, lancez le module dans l’environnement virtuel du projet, comme vous l’avez fait pour le point d’entrée présenté dans la leçon sur les modules. La requête nécessite une connexion Internet ; le taux exact affiché dépend de la réponse de l’API au moment de l’exécution.

CommandeTerminal
python -m depenses.change
Résultat attendu
1 EUR = 1.0800 USD

À retenir

  • Vérifiez le statut HTTP avec raise_for_status() avant de traiter le corps.
  • Décodez le JSON avec response.json() pour obtenir des objets Python.
  • Récupérez le taux dans rates, avec la devise cible comme clé.
  • Ne supposez pas qu’une réponse distante est toujours conforme : le traitement des pannes et la validation complète viendront ensuite.

Dans la prochaine leçon, vous traiterez les erreurs réseau et les réponses distantes inattendues afin de fournir un comportement contrôlé lorsque l’API ne répond pas comme prévu.

Envie d'aller plus loin ?

Les cours Enovatic sont gratuits et le resteront. Si vous cherchez un accompagnement encadré, nos formations professionnelles sont animées par les mêmes formateurs.