PythonFastAPIAPIDev

Python async avec FastAPI : construire des APIs performantes

21 juillet 2026 · Sphinx-Digital

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.