Construire un framework au-dessus de FastAPI, Alembic & SQLAlchemy
Cette idĂ©e est nĂ©e aprĂšs avoir recherchĂ© un moyen de crĂ©er le backend pour un projet personnel. FastAPI a Ă©tĂ© choisi, due au fait quâil permettait de construire une API prĂȘte Ă lâusage en peu de ligne de codes. Il offrait aussi, le typage des rĂ©ponses et des paramĂštres pour les routes sans nĂ©cessitĂ© dâinstaller des packages additionnels.
Auparavant, j'utilisais Django qui est trĂšs bien pour construire des applications, des API et bien dâautres usages. Cependant, il arrive que lâORM nâoptimise pas toutes les requĂȘtes sur la base de donnĂ©e, ce qui rend les opĂ©rations trĂšs lourdes Ă exĂ©cuter.
Le choix de FastAPI a été fait aprÚs avoir parcouru plusieurs sous forums Reddit qui discutait sur des alternatives à Django. Ils recommandaient aussi SQLAlchemy comme ORM et son petit frÚre Alembic pour la gestion des migrations.
NĂ©anmoins, la plupart des tutoriels YouTube qui montraient comment crĂ©er un projet FastAPI ne montraient que comment crĂ©er un projet FastAPI avec quâun seul fichier python. Ce qui est bien pratique quand on dĂ©bute, mais lorsquâon pense Ă dĂ©ployer en production, cette architecture nâest pas pratique.
Alors aprÚs avoir suivi une autre vidéo YouTube mentionnant ce problÚme, il avait été recommandé de prendre exemple sur le répertoire dispatch de Netflix qui utilisait une version modifiée de fastapi.
Dans lâoptique dâavoir une structure production-ready, je me suis inspirĂ©e de ce dernier pour restructurer dâune meilleure maniĂšre mon projet, et intĂ©grer des mĂ©canismes proches de ce que Django que proposait par dĂ©faut ( un mĂ©canisme de boilerplate pour crĂ©er une application dans mon projet, un mĂ©canisme pour crĂ©er et migrer mes modĂšles de base de donnĂ©es ).
Lâarchitecture du projet est prĂ©sentĂ©e ci-dessous :
-- albic : Configuration folder of Alembic for SQLAlchemy ( env.py and migrations ),
-- apps : Core Folder of the app
-- app_names.py : provide custom app folder to use for db migration.
-- db.py : configure the sqlalchemy interface for the app,
-- env.py : configure the .env to load for the app,
-- init.py : override the venv source folder to force it to run from src folder,
-- run.py : load routers and create the app instance for fastapi
-- command : Utilities to create quickly a fast api app
-- create_app.py : similar to django startapp, he copies template from conf/app_template and
create app with the name given
-- abs_create_app.py : functions needed by create_app.py
-- conf : template used by the command
-- requirements : requirements to run this project
-- templates : used by jinja to serve pages
-- tests : write tests here
alembic.ini : alembic config file to start the project
manage.py : entrypoint to start the project, migrate the database, create a app into the project.peacher : Fast API app
-- albic : Configuration folder of Alembic for SQLAlchemy ( env.py and migrations ),
-- apps : Core Folder of the app
-- app_names.py : provide custom app folder to use for db migration.
-- db.py : configure the sqlalchemy interface for the app,
-- env.py : configure the .env to load for the app,
-- init.py : override the venv source folder,
-- run.py : load routers and create the app instance for fastapi
-- command : Utilities to create quickly a fast api app
-- create_app.py : similar to django startapp, he copies template from conf/app_template and
create app with the name given
-- abs_create_app.py : functions needed by create_app.py
-- conf : template used by the command
-- requirements : requirements to run this project
-- templates : used by jinja to serve pages
-- tests : write tests here
alembic.ini : alembic config file to start the project
manage.py : entrypoint to start the project, migrate the database, create a app into the project
Lien vers le projet :
Le script de démarrage est le fichier manage.py, il est trÚs similaire à celui de Django et propose actuellement 3 commandes :
- start_server : il dĂ©marre le serveur pour accĂ©der a lâapplication en production et en dĂ©veloppement. Je lâai testĂ© actuellement sur render.com. Pour pouvoir le faire tourner sur les autres fournisseurs, cela va nĂ©cessiter des configurations additionnelles
- migrate_db : il lance le mécanisme de migration de la base de donnée et versionne-les différents changements,
- create_app : vous permet de créer une petite application avec un nom qui vous auriez fourni. Si par exemple votre application se nomme utilisateurs, la structure de votre projet sera la suivante :
Je vous remercie dâavoir lu cet article et aimerais que vous le partagiez Ă vos collĂšgues ou votre Ă©quipe technique que cela intĂ©resserait.
Ne manquez pas dâapplaudir et de suivre lâauteur ïžđïžïž
Suivez-moi sur les réseaux sociaux : X | LinkedIn | GitHub
Visiter les projets perso que je conçois : Homescript | Tiyalo | Houegbe | Shokays