Se rendre au contenu

Starlette 0.38

support memoryview et compatibilité Python 3.13
20 juillet 2024 par
Starlette 0.38
Makersquad

Date de sortie : 20 juillet 2024

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

Starlette est un framework ASGI léger pour Python, connu pour être la fondation sur laquelle repose FastAPI. Minimaliste par conception, il expose les primitives essentielles — routing, middlewares, requêtes/réponses, WebSockets — sans opinion forte sur l’organisation du projet. Si tu utilises FastAPI, tu utilises Starlette sans forcément le savoir.

La version 0.38 est une release axée sur la performance et la robustesse, avec quelques corrections de bugs notables.

Les nouveautés principales

Support de memoryview dans StreamingResponse et Response

Le changement le plus intéressant de cette version : StreamingResponse et Response acceptent désormais des objets memoryview en plus des bytes classiques. L’avantage ? Du streaming zero-copy — on évite de dupliquer les données en mémoire au moment de les envoyer.

Cas d’usage concret : tu as un buffer binaire dont tu veux envoyer uniquement une portion sans allouer un nouvel objet bytes.

from starlette.responses import StreamingResponse

async def generate():
    data = b"HEADER_PREFIX" + b"actual_content"
    view = memoryview(data)[13:]  # Skip header sans copie
    yield view

response = StreamingResponse(generate(), media_type="application/octet-stream")

Pour les applications qui manipulent de gros volumes de données binaires (traitement de fichiers, streaming audio/vidéo, exports massifs), ce support évite une pression inutile sur le garbage collector.

StaticFiles retourne 404 au lieu de 500 pour les noms trop longs

Comportement corrigé : quand un client envoyait un nom de fichier trop long dans une requête vers StaticFiles, Starlette levait une exception système qui remontait en tant qu’erreur 500. C’est désormais proprement intercepté et converti en 404.

Rien à changer dans ton code, mais c’est le genre de correction qui évite des alertes en production pour une erreur qui n’est pas la tienne.

Corrections BaseHTTPMiddleware

BaseHTTPMiddleware a reçu plusieurs correctifs dans cette version (et dans les patches 0.38.x qui ont suivi). Cette classe a historiquement été source de bugs subtils, notamment autour de la gestion des exceptions et du streaming. Les corrections de 0.38 améliorent la fiabilité dans les cas limites.

Support Python 3.13

La version 0.38.3 apporte la compatibilité officielle avec Python 3.13. Si tu veux anticiper la migration vers la prochaine version majeure de Python, tu peux d’ores et déjà tester ton application Starlette dessus.


É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.38 est une version de consolidation plutôt qu’une release spectaculaire. Le support memoryview est le changement le plus utile pour les applications à fort débit, et les corrections de BaseHTTPMiddleware sont bienvenues pour tout le monde. La compatibilité Python 3.13 arrive en bonus via le patch 0.38.3. Une mise à jour sans risque pour les projets existants.

Django Ninja 1.5
Python 3.13, Django 5.2 et migration vers ConfigDict