Date de sortie : 25 décembre 2023
Release officielle : FastAPI 0.106.0
Une release courte mais qui casse : le comportement des dépendances yield change dans leur interaction avec HTTPException et les background tasks. Si vous levez HTTPException après le yield dans une dépendance, ou si vous partagez une ressource avec une background task, cette release peut affecter votre code.
Ce qui change
HTTPException après yield
Lever HTTPException dans le code après yield (donc dans la phase de nettoyage) ne fonctionne plus. La raison : la réponse a déja été envoyée, on ne peut plus changer le status code.
async def get_db():
db = SessionLocal()
try:
yield db
finally:
db.close()
# Avant : possible (mais problématique)
# Après : ne fonctionne plus
# if something:
# raise HTTPException(400, "oops")
Pour ce cas, il faut soit lever l’exception avant yield, soit utiliser un middleware.
Background tasks et dépendances yield
Avant cette version, le code de nettoyage (après yield) s’exécutait une fois que les background tasks avaient terminé. Désormais, il s’exécute immédiatement, avant l’envoi de la réponse au client. Les background tasks qui dépendaient d’une ressource yield recevaient donc cette ressource déja fermée.
async def get_db():
db = SessionLocal()
try:
yield db
finally:
db.close() # appelé AVANT la background task
async def save_log(db: DB):
# problème si db vient d'une dépendance yield
db.add(log_entry)
@app.post("/items")
async def create_item(
background_tasks: BackgroundTasks,
db: DB = Depends(get_db),
):
background_tasks.add_task(save_log, db) # db fermé
Comment migrer
- Si vous avez besoin d’une ressource dans une background task, créez-la dans la task elle-même, pas via une dépendance yield.
- Si vous leviez HTTPException après yield, déplacez cette logique en amont ou utilisez un middleware.
Échanger avec un expert FastAPI
Nous revenons vers vous sous 24h.
Chez Makersquad, nous concevons des API performantes et évolutives avec FastAPI, un framework reconnu pour sa rapidité, son typage natif et sa documentation automatique basée sur OpenAPI. Que ce soit pour des microservices ou des projets orientés data et IA, FastAPI permet de développer des services robustes tout en garantissant un excellent niveau de performance. Que vous lanciez un nouveau projet ou souhaitiez moderniser votre backend, notre équipe vous accompagne pour construire des API rapides, fiables et prêtes à scaler.
À retenir
Le changement est subtil mais impactant. La doc FastAPI a été mise à jour avec les nouveaux patterns recommandés. Vérifiez vos dépendances yield lors de la montée de version. Pour la plupart des applications CRUD classiques, l’impact sera nul.