Conception d'API Gateway avec YARP (Yet Another Reverse Proxy) en .NET — routing, load balancing, rate limiting, transformations et authentification. À utiliser quand l'utilisateur implémente un reverse proxy ou une gateway API avec YARP en .NET. Se déclenche aussi avec "YARP", "reverse proxy .NET", "API gateway .NET", "YARP routing", "proxy .NET", "load balancer .NET". Also triggers on "YARP reverse proxy", "YARP gateway", "gateway in ASP.NET Core".
Conception d'API Gateway avec YARP (Yet Another Reverse Proxy) en .NET — routing, load balancing, rate limiting, transformations et authentification. À utiliser quand l'utilisateur implémente un reverse proxy ou une gateway API avec YARP en .NET. Se déclenche aussi avec "YARP", "reverse proxy .NET", "API gateway .NET", "YARP routing", "proxy .NET", "load balancer .NET". Also triggers on "YARP reverse proxy", "YARP gateway", "gateway in ASP.NET Core".
API Gateway avec YARP
Critères de décision
Besoin
Recommandation
Reverse proxy léger, intégré .NET
YARP
Developer portal, quotas avancés, monétisation
Azure APIM ou Kong
Multi-tenant avec isolation stricte
YARP + middleware tenant + JWT claims
mTLS entre gateway et backends
YARP + HttpClient custom avec cert
Workflow en 6 étapes
1. Installer le package
dotnet add package Yarp.ReverseProxy
# Dernière version stable : 2.2.0 (LTS .NET 8/9)
// Recharger les routes/clusters depuis n'importe quelle source dynamiquevar proxyConfig = app.Services.GetRequiredService<InMemoryConfigProvider>();
proxyConfig.Update(newRoutes, newClusters);
// Pas besoin de redémarrer le process — YARP recharge instantanément.
Pour un chargement depuis une base de données ou un API config, implémenter IProxyConfigProvider.
Haute charge, meilleure distribution que RoundRobin
FirstAlphabetical
Failover ordonné, actif/passif
Garde-fous et anti-patterns
Ne pas faire :
Laisser les routes sans AuthorizationPolicy sur des endpoints sensibles (oubli silencieux — YARP ne bloque rien par défaut).
Utiliser YARP comme orchestrateur BFF complexe avec logique métier — garder la gateway dumb, les services smart.
Oublier PassiveHealthCheck : sans lui, un backend tombé reste dans la rotation jusqu'au prochain active check.
Configurer HttpClient timeout à l'infini — toujours positionner un timeout explicite (AddTimeout).
Exposer des headers internes (X-Internal-*, Server, X-Powered-By) aux clients — les supprimer dans AddResponseTransform.
Stocker les secrets de cluster (mots de passe mTLS, tokens) dans appsettings.json — utiliser IConfiguration + Azure Key Vault / environment variables.
Pièges courants :
PathRemovePrefix est case-sensitive — tester avec /Api/Payments vs /api/payments si les clients varient.
L'ordre des routes dans le JSON n'est pas garanti en .NET < 8 — utiliser Order explicite sur chaque route si la priorité compte.
AddReverseProxy().LoadFromConfig() et AddTransforms() doivent être chaînés sur le mêmeIReverseProxyBuilder, sinon les transforms ne s'appliquent pas.
Le rate limiting UseRateLimiter() doit être appelé avantMapReverseProxy() dans le pipeline.
Bonnes pratiques 2026
Observabilité : YARP expose des métriques OpenTelemetry natives (Yarp.ReverseProxy activity source) — les brancher sur Prometheus/Grafana ou Azure Monitor.
mTLS inter-services : configurer SocketsHttpHandler avec le certificat client dans ConfigureHttpClient.
Configuration dynamique : préférer IProxyConfigProvider avec rechargement depuis un config store (Consul, Azure App Configuration) plutôt que des restart.
Versioning : router par header Accept-Version ou par host v2.api.company.com plutôt que par path quand les backends sont stables.
Tests : utiliser Microsoft.AspNetCore.TestHost + WebApplicationFactory pour tester les routes YARP sans démarrer de vrai serveur backend (mocker les destinations avec WireMock.Net).
Communication Rules — MANDATORY
Ultra-concise. No filler, no preamble, no pleasantries.
Never say "happy to help", "sure!", "great question", "let me", or similar.
Tool first, talk second. Act before explaining.
Result first. Lead with outcome, not process.
Stop when done. No summary, no recap, no trailing commentary.