Gestion des réponses (Fast API)
Dans FastAPI, une réponse correspond à ce que votre API renvoie au client après avoir traité une requête.
Cela peut être du texte, du JSON, un fichier, ou même un code HTTP spécifique. Chaque endpoint définit comment la réponse est générée.
-
Endpoint : fonction Python qui traite la requête.
-
Réponse : ce que FastAPI renvoie au client (JSON, texte, HTML…).
-
Code HTTP : indique le succès ou l’échec de la requête (200, 201, 404…).
Comment ça fonctionne ?
FastAPI utilise les annotations de type Python et des objets spéciaux pour générer automatiquement des réponses correctes et documentées.
Lorsque le client envoie une requête :
-
FastAPI appelle l’endpoint correspondant.
-
L’endpoint traite la requête et retourne des données.
-
FastAPI convertit ces données en réponse HTTP appropriée, souvent en JSON.
Exemple conceptuel
-
URL :
/users
-
Fonction Python : récupère la liste des utilisateurs depuis la base de données.
-
Méthode HTTP : GET
-
Réponse : JSON contenant la liste des utilisateurs + code HTTP 200
Ici, l’endpoint /users
renvoie automatiquement un JSON bien formé.
Types de réponses dans FastAPI
-
JSON : FastAPI convertit automatiquement les dictionnaires Python et les Pydantic models en JSON.
-
Texte simple : possible avec
PlainTextResponse
. -
Fichiers : FastAPI permet d’envoyer des fichiers avec
FileResponse
. -
HTML : FastAPI peut renvoyer des templates HTML avec
Jinja2Templates
. -
Codes HTTP personnalisés : on peut spécifier un code avec
status_code
.
Pourquoi c’est important
-
Assure que les clients reçoivent des données cohérentes et correctement formatées.
-
Facilite l’intégration avec d’autres services ou applications.
-
Permet une documentation automatique et claire via OpenAPI.
Bonnes pratiques
-
Toujours renvoyer des réponses JSON ou structurées pour les APIs REST.
-
Spécifier un code HTTP clair : 200 pour succès, 201 pour création, 404 pour ressource non trouvée, etc.
-
Valider et filtrer les données avant de les renvoyer.
-
Gérer les erreurs avec
HTTPException
pour renvoyer des messages explicites.
En résumé
-
La réponse est ce que FastAPI renvoie au client après traitement.
-
Les données peuvent être JSON, texte, HTML ou fichiers.
-
Les codes HTTP indiquent le statut de la requête.
-
La bonne gestion des réponses rend l’API fiable, compréhensible et maintenable.
Fonctions :
-
Gestion des réponses avec Fast API (exemple)
Exemple de code :
from fastapi import FastAPI, Response, status from fastapi.responses import JSONResponse, PlainTextResponse app = FastAPI() # 1️⃣ Réponse JSON automatique @app.get("/json/") def get_json(): return {"message": "Ceci est une réponse JSON"} # 2️⃣ Réponse texte simple @app.get("/text/") def get_text(): return PlainTextResponse("Ceci est une réponse texte simple") # 3️⃣ Réponse avec code HTTP personnalisé @app.get("/custom_status/") def custom_status(): return Response(content="Tout va bien mais attention !", status_code=status.HTTP_202_ACCEPTED) # 4️⃣ Réponse JSON avec en-têtes personnalisés @app.get("/headers/") def custom_headers(): content = {"message": "Réponse avec en-têtes personnalisés"} headers = {"X-Custom-Header": "ValeurPersonnalisée"} return JSONResponse(content=content, headers=headers)
Explication du code :
from fastapi import FastAPI, Response, status
importe FastAPI pour créer l’application, Response pour personnaliser les réponses et status pour utiliser des codes HTTP prédéfinis.from fastapi.responses import JSONResponse, PlainTextResponse
importe des classes pour retourner des réponses spécifiques : JSON ou texte brut.app = FastAPI()
crée une instance de l’application FastAPI.Réponse JSON automatique
@app.get("/json/")
définit une route GET.
return {"message": "Ceci est une réponse JSON"}
renvoie automatiquement un objet JSON avec le message.Réponse texte simple
@app.get("/text/")
définit une route GET.
return PlainTextResponse("Ceci est une réponse texte simple")
renvoie une réponse en texte brut plutôt qu’en JSON.Réponse avec code HTTP personnalisé
@app.get("/custom_status/")
définit une route GET.
return Response(content="Tout va bien mais attention !", status_code=status.HTTP_202_ACCEPTED)
renvoie une réponse avec un contenu texte et un code HTTP 202 (Accepted) au lieu du 200 par défaut.Réponse JSON avec en-têtes personnalisés
@app.get("/headers/")
définit une route GET.
content = {"message": "Réponse avec en-têtes personnalisés"}
prépare le contenu JSON.
headers = {"X-Custom-Header": "ValeurPersonnalisée"}
définit un en-tête HTTP personnalisé.
return JSONResponse(content=content, headers=headers)
renvoie la réponse JSON avec l’en-tête ajouté.