OpenAPI, versionnement et déploiement
Générez la documentation Swagger/OpenAPI, versionnez les API et déployez une API Minimal sur Azure App Service ou dans des conteneurs.
OpenAPI, versionnement et déploiement est une leçon C# Academy gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage C# Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours C# Academy comprend 4 leçons au total.
OpenAPI dans les API minimales
OpenAPI (anciennement Swagger) génère une documentation interactive de l’API. Dans .NET 9, AddOpenApi() est intégré. Pour les versions précédentes, utilisez Swashbuckle.AspNetCore.
Ajouter Swagger avec Swashbuckle
Installez Swashbuckle, configurez-le dans les services et ajoutez l’intergiciel pour publier la spécification et l’interface Swagger.
// dotnet add package Swashbuckle.AspNetCore
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen(opt =>
opt.SwaggerDoc("v1", new() { Title = "Products API", Version = "v1" }));
var app = builder.Build();
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}Annoter les points de terminaison pour OpenAPI
Utilisez Produces, ProducesProblem, WithSummary et WithDescription pour enrichir la spécification OpenAPI générée.
app.MapGet("/products/{id}", GetProduct)
.WithName("GetProductById")
.WithSummary("Get a product by ID")
.WithDescription("Returns the product matching the given numeric ID.")
.Produces<ProductDto>(200)
.Produces<ProblemDetails>(404)
.WithTags("Products");Versionnement de l’API avec des groupes de routes
Une stratégie de versionnement simple consiste à utiliser des groupes de routes préfixés par la version. Aucun paquet supplémentaire n’est nécessaire pour le versionnement de base.
var v1 = app.MapGroup("/api/v1").WithTags("v1");
var v2 = app.MapGroup("/api/v2").WithTags("v2");
v1.MapGet("/products", GetProductsV1);
v2.MapGet("/products", GetProductsV2); // different DTO shape
// Clients use /api/v1/products or /api/v2/productsAsp.Versioning pour le versionnement par header ou requête
Le paquet Asp.Versioning.Http ajoute aux API minimales le versionnement par chaîne de requête, par header et par segment d’URL, avec une intégration complète à OpenAPI.
// dotnet add package Asp.Versioning.Http
builder.Services.AddApiVersioning(opt =>
{
opt.DefaultApiVersion = new ApiVersion(1, 0);
opt.AssumeDefaultVersionWhenUnspecified = true;
opt.ApiVersionReader = new QueryStringApiVersionReader("api-version");
});
// /products?api-version=2.0
app.MapGet("/products", GetProducts)
.HasApiVersion(2, 0);Générer une spécification distincte pour chaque version
Configurez Swashbuckle pour générer des documents OpenAPI distincts pour chaque version, afin que les consommateurs ne voient que les points de terminaison correspondant à leur version.
builder.Services.AddSwaggerGen(opt =>
{
opt.SwaggerDoc("v1", new() { Title = "API", Version = "v1" });
opt.SwaggerDoc("v2", new() { Title = "API", Version = "v2" });
});
app.UseSwaggerUI(opt =>
{
opt.SwaggerEndpoint("/swagger/v1/swagger.json", "v1");
opt.SwaggerEndpoint("/swagger/v2/swagger.json", "v2");
});Publier un binaire autonome
Publiez votre API minimale sous la forme d’un binaire autonome unique : aucun environnement d’exécution .NET n’est nécessaire sur la machine cible.
# Publish for Linux x64 as self-contained
dotnet publish -c Release -r linux-x64 --self-contained true
# Run the output binary
./bin/Release/net9.0/linux-x64/publish/MyApi
# Optionally single-file:
# dotnet publish -c Release -r linux-x64 -p:PublishSingleFile=trueConteneuriser avec Docker
Empaquetez l’API dans une image Docker à l’aide des images de base .NET officielles. Un fichier Dockerfile à plusieurs étapes permet de conserver une image finale de petite taille.
# Dockerfile (multi-stage)
FROM mcr.microsoft.com/dotnet/sdk:9.0 AS build
WORKDIR /src
COPY . .
RUN dotnet publish -c Release -o /app
FROM mcr.microsoft.com/dotnet/aspnet:9.0
WORKDIR /app
COPY --from=build /app .
ENTRYPOINT ["dotnet", "MyApi.dll"]
# Build and run
# docker build -t my-api .
# docker run -p 8080:8080 my-apiDéployer sur Azure App Service
Déployez directement sur Azure App Service depuis la CLI. Le service gère la mise à l’échelle, les certificats et les domaines personnalisés.
# Publish to folder first
dotnet publish -c Release -o ./publish
# Deploy to Azure App Service
az webapp up \
--name my-products-api \
--resource-group myRG \
--runtime DOTNETCORE:9.0 \
--sku B1
# View logs
az webapp log tail --name my-products-api --resource-group myRGVérifications d’état
Ajoutez des points de terminaison de vérification d’état afin que les orchestrateurs (Kubernetes, Azure) puissent vérifier que votre API est active et prête à recevoir du trafic.
builder.Services.AddHealthChecks()
.AddDbContextCheck<AppDbContext>()
.AddUrlGroup(new Uri("https://api.external.com/ping"), "external");
app.MapHealthChecks("/health");
app.MapHealthChecks("/health/ready", new HealthCheckOptions
{
Predicate = hc => hc.Tags.Contains("ready")
});Cas réel : liste de contrôle pour la production
Une API minimale destinée à la production doit inclure ces paramètres pour garantir son bon fonctionnement, son observabilité et sa sécurité.
// builder configuration
builder.Services.AddProblemDetails();
builder.Services.AddHealthChecks();
builder.Services.AddRateLimiter(...);
builder.Services.AddOutputCache();
// app pipeline
app.UseHttpsRedirection();
app.UseExceptionHandler();
app.UseRateLimiter();
app.UseOutputCache();
app.UseAuthentication();
app.UseAuthorization();
app.MapHealthChecks("/health");
// ... your endpoints
app.Run();Vérification rapide
Quelle méthode rend les métadonnées des points de terminaison (Produces, WithSummary, etc.) visibles pour les outils OpenAPI dans les API minimales ?
Récapitulatif : OpenAPI, versionnement et déploiement
Points clés :
- AddEndpointsApiExplorer + Swashbuckle = interface Swagger pour les API minimales
- Annotez avec Produces, WithSummary et WithTags pour obtenir une documentation OpenAPI détaillée
- Versionnement simple avec les groupes de routes ; Asp.Versioning pour les scénarios avancés
- Publiez une application autonome ou une image Docker pour un déploiement flexible
- Ajoutez des vérifications d’état pour les sondes de préparation de Kubernetes et d’Azure
Questions Fréquemment Posées
La leçon « OpenAPI, versionnement et déploiement » est-elle gratuite ?
Oui — le texte complet de « OpenAPI, versionnement et déploiement » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours C# Academy, passe à CoddyKit PRO. Le cours C# Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « OpenAPI, versionnement et déploiement » ?
Générez la documentation Swagger/OpenAPI, versionnez les API et déployez une API Minimal sur Azure App Service ou dans des conteneurs. Tu pratiques C# Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer C# Academy ?
Aucune expérience préalable n'est requise. C# Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.
Combien de temps prend la leçon « OpenAPI, versionnement et déploiement » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon C# Academy ?
Oui. Chaque leçon C# Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Créer votre première API Minimal
- Groupes de routes, paramètres et validation
- Intergiciels et filtres dans les API Minimal
- OpenAPI, versionnement et déploiement