Ce projet constitue l'API Gateway d'une application de gestion de commandes pour un restaurant. Il s'inscrit dans une architecture microservices répartie entre plusieurs domaines métier : client, commande, cuisine et livraison.
- Servir de point d'entrée unique pour le Frontend.
- Centraliser les appels vers les microservices.
- Intégrer les services réels (clients, commandes).
- Simuler les échanges pour les services non disponibles.
- Gérer les erreurs et assurer un mode dégradé.
| Composant | Techno |
|---|---|
| API Gateway | FastAPI |
| HTTP Client | HTTPX |
| Langage | Python 3.10+ |
api_gateway/
main.py # Point d’entrée de l’API Gateway
requirements.txt # Dépendances Python
services/ # Regroupe les routes par domaine fonctionnel
auth.py # Authentification fictive (démo / tests)
client_api.py # Redirection vers le microservice Gestion-client-ms
order_api.py # Redirection vers le microservice des commandes
orders.py # Ancien module simulé de commandes (optionnel)
kitchen.py # Module simulé pour le suivi cuisine
delivery.py # Module simulé pour les livraisons
utils/
http_client.py # Appels HTTP simulés pour tests / fallback
git clone git@github.com:MedFrio/fastapi-gateway.git
cd api_gatewaypython -m venv venv
source venv/bin/activate # sur Windows : venv\Scripts\activatepip install -r requirements.txtuvicorn main:app --reload --port 8000L'authentification est entièrement fonctionnelle : la Gateway redirige toutes les requêtes vers le microservice
Gestion-client-ms, qui gère les JWT, les rôles et les sessions.📌 La Gateway ne valide pas les tokens elle-même, mais relaie les headers
Authorization: Bearer <token>au microservice qui, lui, fait les contrôles.
| Méthode | Endpoint | Description | Auth requise |
|---|---|---|---|
POST |
/client-api/login |
Connexion d'un client (retourne JWT) | ❌ |
POST |
/client-api/clients |
Créer un nouveau client | ❌ |
GET |
/client-api/clients |
Lister les clients | ❌ |
GET |
/client-api/clients/{id} |
Récupérer un client par ID | ❌ |
DELETE |
/client-api/clients/{id} |
Supprimer un client | ❌ |
POST |
/client-api/logout |
Déconnexion (invalide le JWT) | ✅ |
POST |
/client-api/logout-all |
Déconnexion toutes sessions | ✅ |
GET |
/client-api/sessions |
Lister les sessions actives | ✅ |
| Méthode | Endpoint | Description |
|---|---|---|
GET |
/order-api/menu |
Lister tous les plats |
GET |
/order-api/menu/filter?categorie=... |
Filtrer les plats par catégorie |
POST |
/order-api/commandes |
Créer une commande |
GET |
/order-api/commandes |
Lister toutes les commandes |
GET |
/order-api/commandes/{id} |
Détail d'une commande |
PATCH |
/order-api/commandes/{id}/status |
Mettre à jour le statut d'une commande |
| Méthode | Endpoint | Description |
|---|---|---|
GET |
/kitchen/orders |
Commandes en cours côté cuisine |
POST |
/kitchen/update |
Marquer une commande comme "prête" |
| Méthode | Endpoint | Description |
|---|---|---|
GET |
/delivery/assigned |
Liste des commandes à livrer |
POST |
/delivery/update |
Marquer une commande comme livrée |
Le module http_client.py est toujours présent dans le projet.
Il permet de simuler les appels aux microservices en mode fallback local, mais n'est plus utilisé activement.
En cas de panne ou d’indisponibilité (par exemple, suppression temporaire d’une route), l’API Gateway :
- Renvoie un message d’erreur clair au frontend
- Garde les autres fonctionnalités opérationnelles
- ✅ Présentation claire du contexte et des services
- ✅ Démonstration fonctionnelle complète (auth, commande, cuisine, livraison)
- ✅ Architecture Microservices respectée (Gateway + découpage logique)
- ✅ Simulation panne gérée efficacement (retour JSON d’erreur)