ADR-035 : Pattern d'Adapter pour Gateway
Metadata
| Champ | Valeur |
|---|---|
| Statut | ✅ Accepté |
| Date | 2026-01-30 |
| Migré depuis | ADR-027 du repo stoa (conflit de numéro) |
Contexte
La STOA Platform doit orchestrer les opérations du gateway API (cycle de vie des APIs, gestion des politiques, configuration OIDC, provisionnement des applications) dans le cadre de son pipeline GitOps. L'implémentation actuelle s'intègre directement avec webMethods API Gateway via son API REST Admin.
Verrou technique : Aucune solution existante ne fournit une réconciliation déclarative et idempotente d'un gateway API propriétaire (webMethods) via API REST avec :
- Gestion de l'état souhaité (Git comme source de vérité)
- Comparaison de l'état observé (runtime du gateway)
- Résolution de conflits bidirectionnelle (déclarations GitOps + provisionnement runtime depuis CAB-800)
- Garanties de convergence
Il n'existe pas de provider Terraform, d'opérateur Kubernetes ou de plugin ArgoCD pour webMethods API Gateway. Le même manque existe pour de nombreux gateways d'entreprise.
Décision
Introduire le Pattern d'Adapter pour Gateway : une interface Python abstraite (GatewayAdapterInterface) qui définit le contrat pour l'orchestration du gateway. Chaque gateway supporté fournit une implémentation d'adapter concrète.
Architecture
GatewayAdapterInterface (ABC)
├── WebMethodsGatewayAdapter ← Première implémentation
├── KongGatewayAdapter ← Planifié
├── ApigeeGatewayAdapter ← Planifié
└── AWSApiGatewayAdapter ← Planifié
Opérations de l'Interface
L'interface couvre 7 domaines de ressources : APIs, Politiques, Applications, Auth/OIDC, Aliases, Configuration et Sauvegarde.
Toutes les opérations retournent AdapterResult(success, resource_id, data, error) et doivent être idempotentes.
Points d'Intégration
- Service de Provisionnement (CAB-800) : Utilise l'adapter pour le provisionnement d'applications en runtime
- Réconciliation Ansible : Utilise directement l'API REST du gateway (pourrait être refactorisé pour utiliser l'adapter via CLI)
- Control Plane API : Expose le statut du gateway via l'état de provisionnement des abonnements
Conséquences
Positives
- Agnostique au gateway : STOA peut orchestrer n'importe quel gateway implémentant l'interface
- Testable : L'interface abstraite permet des adapters mock pour les tests
- Extensible : De nouveaux gateways peuvent être ajoutés sans modifier la logique de réconciliation centrale
- Éligible CIR : Le pattern et sa première implémentation constituent une recherche originale (aucun art antérieur pour l'orchestration déclarative de webMethods)
Négatives
- Indirection : Une couche supplémentaire entre le service et l'API du gateway
- Désalignement d'impédance : Certaines fonctionnalités spécifiques au gateway peuvent ne pas correspondre proprement à l'interface abstraite
- Maintenance : Chaque adapter doit être maintenu et testé indépendamment
Risques
- Les API REST du gateway peuvent changer entre les versions (atténué par des mappers spécifiques à la version)
- Les opérations multi-étapes complexes (ex. configuration OIDC) peuvent nécessiter un séquençage spécifique au gateway
ADRs Associés
- ADR-024 : Architecture Gateway Unifiée — 4 modes de déploiement
- ADR-036 : Auto-Enregistrement du Gateway — Onboarding gateway zéro-config
Contexte de Recherche (CIR)
Ce travail adresse un problème technique nouveau : la réconciliation déclarative de gateways API propriétaires. Indicateurs clés :
- Pas d'art antérieur : Aucun provider Terraform, opérateur K8s ou outil déclaratif n'existe pour webMethods API Gateway
- Gestion d'état bidirectionnelle : Réconciliation de l'état déclaré par Git avec l'état provisionné en runtime (CAB-800)
- Abstraction réutilisable : Le pattern d'adapter est applicable à n'importe quel vendeur de gateway
- Publication potentielle : « Réconciliation Déclarative de Gateways API Propriétaires via Pattern d'Adapter Abstrait »