FastAPI combine la puissance de l’async Python avec la validation automatique via Pydantic. Résultat : des APIs rapides à écrire et rapides à l’exécution.
async/await : pourquoi ça change tout
# ❌ Version synchrone — bloque le thread pendant I/O
@app.get("/users/{user_id}")
def get_user(user_id: int):
user = db.execute("SELECT * FROM users WHERE id = ?", user_id)
return user
# ✅ Version async — libère le thread pendant l'attente DB
@app.get("/users/{user_id}")
async def get_user(user_id: int):
user = await db.fetch_one("SELECT * FROM users WHERE id = ?", user_id)
return user
En version synchrone, chaque requête bloque un thread pendant l’attente de la base de données. En async, le thread traite d’autres requêtes pendant ce temps — scalabilité bien meilleure.
Système de dépendances : injection propre
from fastapi import Depends
async def get_db():
async with AsyncSession(engine) as session:
try:
yield session
await session.commit()
except Exception:
await session.rollback()
raise
async def get_current_user(
token: str = Depends(oauth2_scheme),
db: AsyncSession = Depends(get_db)
) -> User:
payload = jwt.decode(token, SECRET_KEY)
user = await db.get(User, payload["sub"])
if not user:
raise HTTPException(status_code=401)
return user
@app.get("/profile")
async def profile(user: User = Depends(get_current_user)):
return user
Les dépendances sont injectées automatiquement — testables, réutilisables, et gèrent leur propre cycle de vie.
Background tasks : ne pas bloquer la réponse
from fastapi import BackgroundTasks
def send_notification_email(email: str, message: str):
# Opération lente — ne doit pas bloquer la réponse HTTP
send_email(email, message)
@app.post("/orders")
async def create_order(
order: OrderCreate,
background_tasks: BackgroundTasks,
db: AsyncSession = Depends(get_db)
):
new_order = await create_order_in_db(db, order)
background_tasks.add_task(send_notification_email,
order.customer_email, f"Commande {new_order.id} confirmée")
return new_order # réponse immédiate, email envoyé en arrière-plan
Notre formation Python couvre FastAPI et l’async de A à Z avec des projets complets.