Se rendre au contenu

Starlette 0.52

State typé en syntaxe dictionnaire
18 janvier 2026 par
Starlette 0.52
Makersquad

Date de sortie : 18 janvier 2026

Documentation officielle : https://www.starlette.io

Starlette est le framework ASGI Python minimaliste qui sert de fondation à FastAPI. Il fournit les blocs de construction essentiels pour les applications web asynchrones : routing, middlewares, gestion des requêtes et réponses, WebSockets et lifespan. La version 0.52 apporte une amélioration significative pour l’ergonomie du typage, très attendue par les équipes qui utilisent des type checkers comme mypy ou pyright.


Les nouveautés principales

State accessible en syntaxe dictionnaire avec typage complet

C’est la fonctionnalité phare de cette version. L’objet request.state supporte désormais une syntaxe dictionnaire (request.state["key"]) en plus de la syntaxe attribut existante (request.state.key). L’intérêt majeur : la compatibilité avec TypedDict, ce qui permet au type checker de connaître précisément le type de chaque valeur stockée dans le state.

from typing import TypedDict
from starlette.requests import Request
import httpx
import asyncpg

class AppState(TypedDict):
    http_client: httpx.AsyncClient
    db: asyncpg.Connection

async def lifespan(app):
    async with httpx.AsyncClient() as client:
        db = await asyncpg.connect("postgresql://...")
        yield {"http_client": client, "db": db}
        await db.close()

async def homepage(request: Request[AppState]):
    # Le type checker sait que c'est httpx.AsyncClient
    client = request.state["http_client"]
    response = await client.get("https://example.com")
    return PlainTextResponse(response.text)

Avant cette version, request.state était un objet dynamique non typé — chaque accès retournait Any du point de vue du type checker. Avec TypedDict et la nouvelle syntaxe, tu obtiens de l’autocomplétion et de la vérification statique sur le contenu du state applicatif.


Rétrocompatibilité garantie

L’ancienne syntaxe attribut (request.state.attr) reste pleinement fonctionnelle. Il n’y a aucune obligation de migrer vers la syntaxe dictionnaire. Si tu préfères garder le style existant, rien ne change pour toi.


Paramètre encoding dans Config

La classe Config accepte maintenant un paramètre encoding explicite. Utile pour les projets qui chargent des fichiers .env avec un encodage autre qu’UTF-8 — cas de figure moins rare qu’il n’y paraît sur des projets legacy ou dans certains environnements Windows.

from starlette.config import Config

config = Config(".env", encoding="latin-1")

Optimisation de typing_extensions (0.52.1)

Le patch 0.52.1 affine l’usage de typing_extensions : la bibliothèque n’est maintenant importée que sur les versions Python qui en ont réellement besoin. Sur Python 3.11+, la plupart des constructions de typage avancées sont disponibles nativement, et Starlette les utilise directement sans passer par typing_extensions. Un allègement mineur mais cohérent avec la politique de réduction des dépendances amorcée depuis 0.40.


É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

Starlette 0.52 cible en priorité les équipes qui ont une pratique de typage stricte. Le passage à TypedDict pour le state de la requête est un changement de qualité de vie notable : fini les # type: ignore ou les casts manuels pour accéder à des ressources partagées comme des connexions de base de données ou des clients HTTP. La mise à jour est non-breaking, la migration peut se faire progressivement endpoint par endpoint.

Starlette 0.50
Python 3.9 abandonné, cap sur les syntaxes modernes