Introduction — Séance 5
Les quatre premières séances vous ont permis de construire : une API REST Flask avec pagination et agrégation (séance 1), un dashboard Streamlit avec filtres et KPI (séance 2), des graphiques Plotly Express (séance 3), et des requêtes SQL analytiques (séance 4). Jusqu'ici, votre dashboard Streamlit importait directement le VentesRepository Python pour accéder aux données. Cette séance change la donne : vous allez consommer votre API via HTTP.
Contexte
Actuellement, votre dashboard Streamlit fonctionne ainsi :
from api.repository import VentesRepository
repo = VentesRepository("db/ventes.db")
data = repo.get_par_region(annee=2024)
Cette approche fonctionne, mais elle a des limites :
- Couplage fort : le dashboard et l'API partagent le même code Python, le même processus, la même machine.
- Pas de vrai test d'API : vous n'utilisez jamais réellement les endpoints HTTP que vous avez construits en séance 1.
- Non représentatif du monde réel : en entreprise, les dashboards consomment des APIs distantes — pas des imports directs.
Cette séance remplace l'import direct par des appels HTTP.
Pourquoi maintenant ?
Les séances 1 à 4 ont volontairement utilisé l'import direct pour se concentrer sur Streamlit, Plotly et SQL sans ajouter la complexité réseau. Maintenant que vous maîtrisez ces outils, vous êtes prêts à ajouter la couche HTTP.
Objectifs de la séance
À la fin de cette séance, vous saurez :
- Expliquer quand l'import direct est approprié et quand HTTP est nécessaire
- Utiliser requests pour appeler une API REST depuis Python
- Gérer les erreurs réseau et HTTP avec
try/exceptetraise_for_status() - Comprendre CORS et configurer flask-cors
- Sécuriser votre API avec une clé d'API (header
X-API-Key) - Gérer les secrets avec st.secrets (Streamlit) et os.environ (Flask)
- Structurer un client HTTP avec
requests.Session
Prérequis
- Séances 1 à 4 complétées : API Flask fonctionnelle, dashboard Streamlit, graphiques Plotly, requêtes SQL analytiques
- API Flask en cours d'exécution : votre serveur Flask doit tourner sur
http://localhost:5000pendant toute la séance - Installation de requests : la bibliothèque n'est pas incluse par défaut
pip install requests
API Flask requise
Avant de commencer, assurez-vous que votre API Flask est lancée et accessible. Testez avec :
curl http://localhost:5000/api/v1/ventes/par-region
Si cette commande ne retourne pas de JSON, relancez votre serveur Flask avant de continuer.
Plan de la séance
| Partie | Contenu | Durée estimée |
|---|---|---|
| Pourquoi HTTP ? | Couplage direct vs HTTP, architecture cible, cas d'usage | 15 min |
| La bibliothèque requests | Installation, GET, Response, params, JSON vers DataFrame | 20 min |
| Gestion des erreurs | Erreurs réseau vs HTTP, exceptions, pattern api_get, st.spinner | 25 min |
| CORS | CORS expliqué, flask-cors, quand ça s'applique | 10 min |
| Sécuriser l'API | Clé d'API, @require_api_key, st.secrets, os.environ | 15 min |
| Client HTTP structuré | VentesAPIClient, requests.Session, cache_resource, comparaison | 20 min |
| Exercices | Mise en pratique (4 parties progressives) | 45 min |
| Quiz | Validation des acquis | 10 min |
| Conclusion | Récapitulatif, checklist et architecture finale | 5 min |
Approche pédagogique
Chaque section part d'un problème concret, puis fournit la solution avec du code fonctionnel. À la fin de la séance, votre dashboard Streamlit sera connecté à l'API Flask via HTTP, avec gestion d'erreurs et authentification.