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

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.