2.4 KiB
Conception
Ce projet microservices est composé de 3 microservices. Chaque microservice part de la même base, mais traite des ressources différentes (athlètes, médailles, disciplines).
Modèle de base
Le fichier app.py
contient la base Python, une simple application Flask. Dans le Dockerfile, on lance l'application avec gunicorn
pour plus de performance.
Chaque microservice dispose aussi d'un fichier models.py
qui contient les classes de données, elles même héritant de la classe BaseModel
de Pydantic afin de faire de la validation de données.
Cela permet aussi de sérialiser les données en JSON facilement.
Un dossier tests/
est aussi présent pour les tests unitaires. Les tests sont lancés avec pytest
.
Cela permet de tester les routes, les modèles et les fonctions de validation si il y'en a.
Pour les tests, des fichiers d'example (Dossier ./sample
) sont automatiquement copiées dans le dossier test pour avoir des données stables.
Ce dossier sample
sert aussi aux données de base de l'API copiées lors du Dockerbuild dans un dossier ./data
.
Service "home"
A l'aide du design system de l'état français : https://www.systeme-de-design.gouv.fr/, une page d'accueil est affichée à la racine du site.
Celle-ci correspond à la page d'accueil du projet, et redirige vers les différentes sous API, à savoir /athletes
, /medailles
et /disciplines
mais aussi aux documentations respectives du projet.
Docker
Un unique fichier docker-compose.yml
est utilisé pour lancer les 3 microservices ainsi que traefik pour le reverse proxy et le service home
.
A l'aide de l'argument build
et context
, les microservices sont construits à partir de leur Dockerfile respectif directement lors du compose
.
Traefik est configuré pour rediriger les requêtes vers les microservices en fonction du sous dossier demandé à l'aide du label traefik.http.routers.<service>.rule
, argument PrefixPath
.
En effet, traefik ne nécessite pas de fichier de configuration: il lit les labels des conteneurs Docker pour savoir comment rediriger les requêtes.
Le fichier docker-compose.yml
est configuré pour que traefik utilise le port 8082
.
Swagger
Chaque microservice expose une GUI Swagger à l'adresse /<service>/swagger/
.
Celle-ci est servie de façon statique à l'aide du fichier static/swagger.json
.