Skip to content

Repository files navigation

🌿 Green Architecture : moins de gras, plus d'impact, plus d'efficacité !

Green API Score CIGreen Score

Devoxx France 2026 — Tools in Action

Vos APIs ont pris un peu de poids ? Elles consomment plus que nécessaire ? Pas de panique, on sort la boîte à outils pour leur faire un Green relooking !


🎯 Objectif

Appliquer pas à pas le framework API Green Score sur une API réelle, avec des outils open-source et des métriques concrètes, pour obtenir une API plus légère, plus rapide, et un impact environnemental réduit.

📐 Règles API Green Score couvertes dans cette demo

  • DE11 Pagination, DE08 Filtering, US01 Query params
  • DE01/USXX Compression (Gzip), DE02/DE03 HTTP Cache (ETag/304)
CatégorieRègleDescriptionPoints
Data ExchangeDE11Pagination obligatoire15
Data ExchangeDE08Filtrage de champs (fields=)25
Data ExchangeDE01Compression (Gzip/Brotli)30
UsageLO01Observabilité (logs payload/latence)15
UsageUS07Rate Limiting15
Total100

📁 Structure du projet

green-api-workshop-devoxx/
├── green-api-baseline/ # 🔴 API naïve (AVANT) — port 8080
│ ├── src/main/java/ # Pas de pagination, pas de cache, pas de compression
│ └── pom.xml
├── green-api-optimized/ # 🟢 API optimisée (APRÈS) — port 8081
│ ├── src/main/java/ # Pagination, fields, gzip, ETag, delta, range, CBOR
│ └── pom.xml
├── scripts/ # 📊 Scripts de mesure curl
│ ├── green-score-analyzer.sh # 🌿 Analyseur automatisé + calcul Green Score
│ ├── measure_baseline.sh
│ ├── measure_optimized.sh
│ └── ...
├── greenanalyzer/dashboard/ # 📈 Dashboard HTML de restitution
│ └── index.html # Scores, graphiques avant/après, historique
├── greenanalyzer/reports/ # 📄 Rapports JSON générés
├── greenanalyzer/.github/workflows/ # 🤖 CI GitHub Actions
│ └── pr-green-api.yml # Build + Green Score + Spectral lint
├── .spectral.yml # 🔬 Règles Spectral OpenAPI (éco-conception)
├── docker-compose.yml # 🐳 Orchestration Docker
├── WORKSHOP.md # 📝 Déroulé clé-en-main (50 min)
├── CHECKLIST.md # ✅ Checklist de review
├── MAPPING.md # 🗺️ Mapping pratiques → règles
└── ADVANCED.md # 🚀 Exercices avancés

🚀 Démarrage rapide

⚠️ATTENTION — Les options ci-dessous sont EXCLUSIVES. Choisissez une seule option de démarrage. Ne les lancez pas en parallèle : chaque option démarre les mêmes services sur les mêmes ports.


🏗️ Pré-requis

  • Java 17+
  • Maven 3.9+
  • curl
  • Python 3 (pour le script d'analyse)
  • Docker ou Podman & Docker/Podman Compose (optionnel) (en fonction il faudra adapter les commandes de démarrage du compose)
  • Node.js (optionnel, pour Spectral)

🅰️ Option 0 : Script start (local)

🐧 Linux / macOS

# Dataset plus gros pour accentuer le contraste avant/après
DATASET_SIZE=1000000 bash greenanalyzer/scripts/start.sh --analyze --appname "mon-api" --creedengo
# Avec affichage du rapport JSON complet (debug) :
DATASET_SIZE=1000000 bash greenanalyzer/scripts/start.sh --analyze --debug --appname "mon-api" --creedengo

──────────────────── OU ────────────────────


🅰️ Option 0-bis : Script start (Podman Compose 2 terminaux séparés)

🐧 Linux / macOS

# Terminal 1 — Démarrage des services (API + Dashboard)
podman compose down --remove-orphans 2>/dev/null ||true
podman compose up --build --force-recreate
# Terminal 2 — Analyse automatisée# Dataset plus gros pour accentuer le contraste avant/après
DATASET_SIZE=1000000 bash greenanalyzer/scripts/start_light.sh --analyze --appname "mon-api" --creedengo

A la fin pour nettoyer les ressources, depuis un terminal utilisez : la commande docker compose down --remove-orphans ou podman compose down --remove-orphans selon votre choix de conteneurisation.


──────────────────── OU ────────────────────


🅱️ Option 1 : Maven (local)

🐧 Linux / macOS: sur 3 terminaux en //

# Terminal 1 — Baseline (API naïve, port 8080)cd green-api-baseline && mvn spring-boot:run
**NB: Il faudra faire un Ctrl+C dans ce terminal pour arrêter l API à la fin.**# Terminal 2 — Optimized (API green, port 8081)cd green-api-optimized && mvn spring-boot:run
**NB: Il faudra faire un `Ctrl+C` dans ce terminal pour arrêter l API à la fin.**# Terminal 3 — Analyse automatisée
bash ./greenanalyzer/scripts/green-score-analyzer_withdiscovery.sh
# Avec affichage du rapport JSON complet (debug) :
bash ./greenanalyzer/scripts/green-score-analyzer_withdiscovery.sh --debug

──────────────────── OU ────────────────────


🅲 Option 2 : Docker Compose (2 terminaux séparés)

🐧 Linux / macOS

# Terminal 1 — Démarrage des services (API + Dashboard)
docker compose up --build # → Baseline: http://localhost:8080# → Optimized: http://localhost:8081# → Dashboard: http://localhost:3000# Terminal 2 — Analyse automatisée
bash greenanalyzer/scripts/green-score-analyzer_withdiscovery.sh

NB: A la fin pour nettoyer les ressources, depuis terminal 1 utilisez : la commande ctrl + c et ensuite une des commandes suivantes docker compose down --remove-orphans ou podman compose down --remove-orphans selon votre choix de conteneurisation.

🅲 Option 2-bis : Podman Compose (2 terminaux separés)

🐧 Linux / macOS

# Terminal 1 — Démarrage des services (API + Dashboard)
podman compose down --remove-orphans 2>/dev/null ||true
podman compose up --build # → Baseline: http://localhost:8080# → Optimized: http://localhost:8081# → Dashboard: http://localhost:3000# Terminal 2 — Analyse automatisée
bash greenanalyzer/scripts/green-score-analyzer_withdiscovery.sh

NB: A la fin pour nettoyer les ressources, depuis terminal 1 utilisez : la commande ctrl + c et ensuite une des commandes suivantes docker compose down --remove-orphans ou podman compose down --remove-orphans selon votre choix de conteneurisation.

📊 Dashboard

Ouvrez http://localhost:3000 dans votre navigateur pour visualiser : (ou en fallback, ouvrez greenanalyzer/dashboard/index.html directement)

  • 🌿 Green Score /100 avec grade (A+ → E)
  • 📋 Détail par règle API Green Score
  • 📊 Comparaison avant/après (barres visuelles)
  • 🔑 Métriques clés (payload, compression, 304)
  • 📐 Table de mesures détaillée par endpoint
  • 📈 Historique des scores (tracking dans le temps)

Le dashboard charge automatiquement greenanalyzer/reports/latest-report.json ou permet de charger manuellement un rapport.

📄 Versions du dashboard

FormatFichierRendu
HTML interactifgreenanalyzer/dashboard/index.htmlOuvrir localement ou via GitHub Pages
Markdowngreenanalyzer/dashboard/index.mdVisible directement sur GitHub
GitHub PagesDéployé automatiquement sur mainhttps://<user>.github.io/<repo>/

Le fichier index.md est généré automatiquement à chaque analyse et contient la même information que le dashboard HTML (score, détail, mesures, spectral).

🤖 Automatisation CI: vous avez un exemple de github action dans ce repo qui montre comment automatiser l'analyse du Green Score ./.github/workflows/pr-green-api.yml

Chaque PR déclenche automatiquement :

  1. Build des deux modules
  2. Green Score Analysis — démarre les 2 APIs, exécute l'analyseur, vérifie les assertions
  3. Spectral Lint — valide l'OpenAPI spec contre les règles Green API
  4. Commentaire PR — poste le score détaillé directement sur la PR
  • .github/workflows/pr-green-api.yml : build, analyse, assertions, commentaire PR
  • .spectral.yml : règles OpenAPI éco-conception
  • Le score est posté automatiquement sur chaque PR

📏 Mesurer en live

📚 Liens utiles

📝 Documents de l'atelier

📄 Licence

MIT — Libre d'utilisation, de modification et de redistribution.

Useful Documents

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages