TP_JO2024/CONCEPTION.md
2024-03-27 17:39:55 +01:00

37 lines
2.4 KiB
Markdown

# 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/](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``.