Facile
Conclusion — Séance 5
Votre dashboard Streamlit ne dépend plus d'un import Python direct — il communique avec l'API Flask via HTTP.
Ce que vous savez faire
Vous savez maintenant :
- Choisir entre import direct et HTTP selon le contexte de déploiement
- Effectuer des appels HTTP :
requests.get(),params,response.json()vers DataFrame - Gérer les erreurs : erreurs réseau (exceptions) vs erreurs HTTP (codes de statut),
raise_for_status(),timeout,st.stop() - Comprendre CORS : quand il s'applique (navigateur) et quand il ne s'applique pas (
requests) - Sécuriser une API : clé d'API via
X-API-Key, décorateur@require_api_key, codes 401 vs 403 - Gérer les secrets :
st.secretscôté Streamlit,os.environ+python-dotenvcôté Flask - Structurer un client HTTP : classe
VentesAPIClient,requests.Session,@st.cache_resource
Patterns clés
Patterns à retenir
- Découplage HTTP — le dashboard ne connaît que l'URL de l'API, pas son implémentation interne
- Gestion d'erreurs centralisée — une méthode
_getprivée qui gère tous les cas (réseau, HTTP, timeout) - Interface identique — le client HTTP expose les mêmes méthodes que le repository (
get_par_region,get_stats...) - Secrets hors du code —
.streamlit/secrets.tomlet.env, jamais de clés dans le code source - Session réutilisable —
requests.Session()pour la performance et les headers persistants
Architecture finale
Chargement du diagramme…
Checklist de validation
Vérifiez ces points avant de passer à la suite :
| Point de contrôle | Code / technique |
|---|---|
| Aucun import direct du repository | Pas de from api.repository import ... dans le dashboard |
| Timeout sur chaque appel | timeout=10 dans chaque requête requests |
| Gestion d'erreurs complète | ConnectionError, Timeout, HTTPError gérées |
| Clé API non hardcodée | st.secrets['API_KEY'] ou os.environ.get('API_KEY') |
| Fichiers secrets dans .gitignore | .streamlit/secrets.toml et .env |
| Client HTTP structuré | Classe VentesAPIClient dans un fichier séparé |
| Session réutilisée | requests.Session() + @st.cache_resource |
| Spinner de chargement | st.spinner() autour des appels réseau |
La suite
Récapitulatif des briques construites au fil des séances :
| Séance | Brique |
|---|---|
| Séance 1 | API REST Flask — endpoints, pagination, agrégation |
| Séance 2 | Dashboard Streamlit — widgets, layout, session_state |
| Séance 3 | Visualisations Plotly Express — graphiques interactifs |
| Séance 4 | SQL analytique — requêtes avancées, window functions |
| Séance 5 | Communication HTTP — découplage, sécurité, client structuré |
Bilan
La stack couvre maintenant : une API REST sécurisée (Flask), un dashboard interactif (Streamlit + Plotly), des requêtes analytiques (SQL), et une communication HTTP avec gestion d'erreurs et authentification.