Skip to content

Latest commit

 

History

4 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 

Repository files navigation

MICROSERVICES-EXO

Projet illustrant une architecture e-commerce basée sur des microservices. Chaque domaine métier est exposé par une API FastAPI indépendante, tandis que Traefik joue le rôle d'API Gateway et redirige les requêtes vers le bon service.

Architecture

Client
  |
  v
Traefik API Gateway (:8000)
  |-- /api/users    -> user_service (:8001)
  |-- /api/products -> product_service (:8002)
  |-- /api/payments -> payement_service (:8003)
  `-- /api/orders   -> order_service (:8004)
                         |
                         `-> product_service
Service Rôle Port interne Préfixe public
api_gateway Routage Traefik 8000 /
user_service Inscription et connexion 8001 /api/users
product_service Création et consultation des produits 8002 /api/products
payement_service Simulation des paiements 8003 /api/payments
order_service Création des commandes 8004 /api/orders

Les services communiquent sur le réseau Docker privé backend_network. Seuls l'API Gateway et le tableau de bord Traefik sont accessibles depuis la machine hôte.

Technologies utilisées

  • Python 3.9
  • FastAPI
  • Uvicorn
  • Pydantic
  • Traefik 3.7
  • Docker et Docker Compose

Prérequis

  • Docker
  • Docker Compose v2

Vérifier leur installation :

docker --version
docker compose version

Lancer le projet

Depuis la racine du dépôt :

cd backend
docker compose up --build

Une fois les conteneurs démarrés :

Pour démarrer en arrière-plan :

docker compose up --build -d

Pour consulter les journaux :

docker compose logs -f

Pour arrêter le projet :

docker compose down

Exemples d'utilisation

Créer un utilisateur

curl -X POST http://localhost:8000/api/users/signup \
  -H "Content-Type: application/json" \
  -d '{
    "username": "eddy",
    "email": "eddy@example.com",
    "password": "secret"
  }'

Connecter un utilisateur

curl -X POST http://localhost:8000/api/users/login \
  -H "Content-Type: application/json" \
  -d '{
    "username": "eddy",
    "email": "eddy@example.com",
    "password": "secret"
  }'

Créer un produit

curl -X POST http://localhost:8000/api/products/products \
  -H "Content-Type: application/json" \
  -d '{
    "id": 1,
    "name": "Clavier",
    "price": 25.99,
    "stock": 10
  }'

Consulter un produit

curl http://localhost:8000/api/products/products/1

Effectuer un paiement

Le montant est actuellement reçu comme paramètre de requête :

curl -X POST "http://localhost:8000/api/payments/pay?amount=25.99"

Créer une commande

curl -X POST http://localhost:8000/api/orders/order \
  -H "Content-Type: application/json" \
  -d '{
    "product_id": 1,
    "quantity": 2
  }'

Structure du projet

MICROSERVICES-EXO/
|-- README.md
`-- backend/
    |-- docker-compose.yml
    |-- user_service/
    |   |-- Dockerfile
    |   `-- main.py
    |-- product_service/
    |   |-- Dockerfile
    |   `-- main.py
    |-- payement_service/
    |   |-- Dockerfile
    |   `-- main.py
    `-- order_service/
        |-- Dockerfile
        `-- main.py

Limites actuelles

Ce projet est une démonstration simple :

  • les données sont stockées en mémoire et disparaissent au redémarrage des conteneurs ;
  • aucune base de données n'est encore configurée ;
  • l'authentification ne génère pas encore de jeton et les mots de passe ne sont pas chiffrés ;
  • le paiement est simulé ;
  • le service de commandes est encore en cours d'implémentation et son flux complet doit être corrigé avant une utilisation réelle ;
  • aucun test automatisé n'est actuellement inclus.

Améliorations possibles

  • ajouter PostgreSQL ou MongoDB à chaque service qui en a besoin ;
  • sécuriser l'authentification avec des mots de passe hachés et des jetons JWT ;
  • finaliser la communication entre les services de commandes et de produits ;
  • mettre à jour le stock après la validation d'une commande ;
  • ajouter la validation et le suivi des paiements ;
  • ajouter des tests unitaires et d'intégration ;
  • centraliser la configuration avec des variables d'environnement.

Licence

Ce projet est fourni à des fins d'apprentissage.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages