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.secrets côté Streamlit, os.environ + python-dotenv côté Flask
  • Structurer un client HTTP : classe VentesAPIClient, requests.Session, @st.cache_resource

Patterns clés

Patterns à retenir

  1. Découplage HTTP — le dashboard ne connaît que l'URL de l'API, pas son implémentation interne
  2. Gestion d'erreurs centralisée — une méthode _get privée qui gère tous les cas (réseau, HTTP, timeout)
  3. Interface identique — le client HTTP expose les mêmes méthodes que le repository (get_par_region, get_stats...)
  4. Secrets hors du code.streamlit/secrets.toml et .env, jamais de clés dans le code source
  5. Session réutilisablerequests.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ôleCode / technique
Aucun import direct du repositoryPas de from api.repository import ... dans le dashboard
Timeout sur chaque appeltimeout=10 dans chaque requête requests
Gestion d'erreurs complèteConnectionError, Timeout, HTTPError gérées
Clé API non hardcodéest.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éerequests.Session() + @st.cache_resource
Spinner de chargementst.spinner() autour des appels réseau

La suite

Récapitulatif des briques construites au fil des séances :

SéanceBrique
Séance 1API REST Flask — endpoints, pagination, agrégation
Séance 2Dashboard Streamlit — widgets, layout, session_state
Séance 3Visualisations Plotly Express — graphiques interactifs
Séance 4SQL analytique — requêtes avancées, window functions
Séance 5Communication 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.