Litestar mérite qu’on s’y intéresse
(b-list.org)- Litestar est l’un des joyaux méconnus parmi les frameworks web asynchrones Python
- Grâce à sa montée en charge rapide et à son architecture flexible, il s’adapte facilement à des projets très variés
- Il propose une modélisation des données non dépendante d’une bibliothèque spécifique comme Pydantic
- Son intégration avec SQLAlchemy est excellente, ce qui en fait un framework solide pour la connexion et la gestion de bases de données
- Avec ses fonctions intégrées pratiques comme l’authentification, le caching, la journalisation et le monitoring, il peut être utilisé immédiatement en contexte professionnel
Présentation de Litestar
- Alors que les frameworks web Python async-first et basés sur les annotations de type ont gagné en popularité ces dernières années, Litestar a été choisi pour accumuler de l’expérience d’usage sur le terrain
- Après avoir adopté Litestar comme framework principal sur plusieurs projets réels, la confiance dans ce choix n’a cessé de grandir
- Beaucoup de développeurs web Python ne connaissent pas encore Litestar, et cet article présente donc ses principaux avantages et points distinctifs
Exemples et comparaison avec d’autres frameworks
-
Litestar permet d’écrire très facilement une application web en un seul fichier
- Son route decorator est une fonction indépendante non rattachée à l’objet application
- Dans l’exemple de code, accéder à
/greet?name=Bobrenvoie “Hi, Bob!” - Si un paramètre requis manque, une réponse 400 est automatiquement renvoyée
-
Contrairement aux microframeworks Python classiques comme Flask ou FastAPI, Litestar possède des caractéristiques structurelles qui lui permettent de s’étendre naturellement à des projets de tailles très diverses
- Avec l’approche Flask ou FastAPI, les décorateurs de routage sont liés à l’objet application, ce qui peut entraîner des problèmes d’import circulaire lors d’une séparation en plusieurs fichiers
- Il faut généralement utiliser un registre de routes secondaire (blueprint dans Flask/Quart,
APIRouterdans FastAPI, etc.), ce qui augmente la barrière d’entrée ou impose une évolution de la structure - Avec Litestar, en revanche, le decorator est une fonction indépendante, ce qui rend la transition entre une app monofichier et une architecture distribuée à grande échelle très simple
-
Grâce à l’architecture de base de Litestar et à sa manière de structurer la documentation, il est possible d’introduire très tôt les notions de routeurs et de regroupements fonctionnels, ce qui facilite le maintien d’une organisation cohérente même pour des API complexes
- L’injection de dépendances, les permissions et le partage de configuration par route constituent de vrais points forts en matière de composability
- Il est possible d’enregistrer la même route plusieurs fois afin d’appliquer des mécanismes d’authentification ou des dépendances selon l’environnement
Modélisation sans dépendance forte à Pydantic
-
FastAPI et d’autres frameworks reposent fortement sur Pydantic pour les données
- Pydantic excelle dans la validation et la sérialisation basées sur les types, mais son intégration directe avec un ORM comme SQLAlchemy reste difficile
- En pratique, il faut souvent écrire séparément les modèles SQLAlchemy et les modèles Pydantic, ce qui ajoute une contrainte fastidieuse
-
Litestar prend en charge de manière générique non seulement Pydantic, mais aussi dataclasses, msgspec, attrs et les modèles SQLAlchemy
- Il dispose d’un protocole de plugin de sérialisation qui améliore fortement son extensibilité
- Une fonction d’extraction automatique des objets de transfert de données (DTO) est intégrée, de sorte qu’une modification de la classe de données source se reflète automatiquement dans le DTO
- Il est aussi facile de déclarer l’exclusion ou l’inclusion de certains champs, le mapping de noms ou encore des DTO de mise à jour partielle
- Cela permet d’éviter les déclarations redondantes de champs de modèle et les erreurs fréquentes liées à la synchronisation manuelle
Intégration avec SQLAlchemy et présentation d’Advanced Alchemy
-
L’ORM SQLAlchemy est de fait le standard pour l’accès aux bases de données en Python
- Litestar offre une intégration particulièrement réussie avec SQLAlchemy : sérialisation automatique des schémas, automatisation des DTO, plugin de gestion de session, plugins composés, etc.
-
La bibliothèque Advanced Alchemy (maintenue par l’équipe Litestar) étend encore les capacités de SQLAlchemy
- Elle fournit de nombreuses améliorations de qualité : PK volumineuses indépendantes de la base, horodatage automatique, clés UUID, type JSON, intégration avec les migrations Alembic, Seed/Export, etc.
- Une fonctionnalité particulièrement notable est la prise en charge des abstractions repository et service layer, qui fournit automatiquement diverses fonctions de stockage comme le CRUD ou la pagination
- Dans des frameworks qui, contrairement à Django, offrent peu de lignes directrices structurelles, cela fournit une manière d’organiser les projets qui justifie l’adoption d’une repository/service layer
Autres caractéristiques et fonctions intégrées
- Litestar fournit aussi en interne un système d’authentification (fonctions guard, middleware), le caching (stores), la journalisation, des réponses d’erreur standardisées, des métriques basées sur Prometheus/OpenTelemetry et la prise en charge de htmx
- Contrairement à d’autres microframeworks, il n’est pas nécessaire de chercher des bibliothèques externes séparées ni d’écrire du glue code personnalisé pour implémenter certaines fonctionnalités
- Il conserve la simplicité d’un « microframework », tout en permettant d’utiliser immédiatement des fonctions d’extension ou des fonctionnalités supplémentaires selon les besoins
- Plutôt qu’un simple remplaçant de Django ou Flask, son concept consiste à intégrer de manière Pythonic les points forts de frameworks d’autres langages, comme Java Spring Boot, notamment sur la structure initiale et la commodité
- Dans l’ensemble, c’est une option offrant de forts gains de productivité et des avantages structurels pour le développement web Python en conditions réelles
Conclusion
- Grâce à son asynchronisme, son approche basée sur les types, sa flexibilité d’extension, sa modélisation de données non rigide, ainsi que l’excellence de son ORM et de ses fonctions intégrées, Litestar s’impose comme un framework que tout développeur web Python devrait envisager au moins une fois
- Après un usage répété sur des projets réels, il a démontré une forte productivité et une bonne maintenabilité, y compris dans des environnements variés comme les startups
- On peut espérer que les développeurs considéreront Litestar comme l’une des options possibles pour leur prochain projet web Python
2 commentaires
Le problème des « imports circulaires » en Python n’a-t-il pas déjà des solutions assez claires ? J’ai du mal à y voir un problème vraiment majeur.
Avis Hacker News
@post("/route", exception_handlers={...})paraît un peu maladroit. J’espère de meilleurs outils intégrés et une meilleure expérience de développement à l’avenir@postformqui gérerait tout ce qui concerne les formulaires