Aller au contenu principal

ADR-001 : Stratégie d'exposition des API tierces — Façade API publique

Métadonnées

ChampValeur
Statut✅ Accepté
Date18 janvier 2026
LinearCAB-669 (Epic)

Contexte

La plateforme STOA évolue avec plusieurs composants en parallèle : Control Plane API (FastAPI), MCP Gateway, Portail Développeur (React), Console (React) et webMethods Gateway.

Problèmes identifiés

ProblèmeImpactSévérité
Dépendances croiséesChaque composant accède directement à PostgreSQL, GitLab, Keycloak🔴 Élevée
Rôle flou de webMethodsUtilisé pour l'administration ET le runtime, difficile à faire évoluer🔴 Élevée
Duplication de logiqueValidation, authentification, isolation tenant répétées partout🟡 Moyenne
Déploiement coupléImpossible de déployer le Portal sans le MCP Gateway🟡 Moyenne

Question architecturale

Comment structurer les composants STOA pour qu'ils soient déployables indépendamment, tout en maintenant GitLab comme source de vérité et en clarifiant le rôle de chaque élément ?

Décision

Adopter une architecture Control Plane / Data Plane avec le Core API comme hub central.

Options envisagées

OptionDescriptionVerdict
A. Monolithe modulaireTout dans un seul artefact❌ Contre l'open-core, passage à l'échelle tout-ou-rien
B. Microservices pursUn service par domaine❌ Surdimensionné pour la taille de l'équipe
C. Control Plane / Data PlaneSéparation claire des responsabilitésRetenu

Architecture

Composants

ComposantTypeRôleDépendances
STOA Core APIBackend (FastAPI)Hub central, toute la logique métierPostgreSQL, GitLab, Keycloak
STOA PortalFrontend (React)Self-service développeurCore API uniquement
STOA ConsoleFrontend (React)Administration de la plateformeCore API uniquement
STOA MCP ServerBackend (Python)Interface IA/LLMCore API uniquement
webMethods GatewayData PlaneExécution du trafic API runtimeSynchronisation config depuis Core API

Règles d'architecture

Règle 1 : Dépendances unidirectionnelles

Interdit : Portal → PostgreSQL (direct), MCP Server → GitLab (direct)

Règle 2 : GitLab = Source de vérité pour les définitions

# Ce qui réside dans GitLab (stoa-catalog)
stoa-catalog/
tenants/{tenant}/
apis/{api}/
api.yaml # Définition de l'API
openapi.yaml # Spécification OpenAPI

# Ce qui réside dans PostgreSQL
- subscriptions, api_keys, audit_logs, rate_limit_usage, mcp_sessions

Règle 3 : webMethods = Data Plane uniquement

À FAIRE : Routage, Rate limiting, Validation JWT, Transformation, Cache ❌ À NE PAS FAIRE : Servir des interfaces, Gérer les souscriptions, Stocker des données

Façade API publique

Architecture

Endpoints exposés aux tiers

/v1/portal/:
catalog: # Public ou clé API
GET /apis, GET /apis/{id}, GET /apis/{id}/spec
subscriptions: # OAuth2 requis
GET/POST/DELETE /subscriptions
me: # OAuth2 requis
GET /me, GET /me/usage

JAMAIS exposés : /v1/admin/*, /v1/tenants/*/members, /v1/gateway/*

Conséquences

Positives

  • ✅ Déploiement indépendant des composants
  • ✅ GitLab reste la source de vérité
  • ✅ Séparation claire Control Plane / Data Plane
  • ✅ Exposition tierce sécurisée

Négatives

  • ⚠️ Latence supplémentaire (MCP → Core API vs accès direct DB)
  • ⚠️ Effort de migration

Références