OpenAPI, versionado y despliegue
Genere documentación de Swagger/OpenAPI, versione las API y despliegue una Minimal API en Azure App Service o en contenedores.
OpenAPI, versionado y despliegue es una lección gratuita de C# Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C# Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C# Academy incluye 4 lecciones en total.
OpenAPI en las API Minimal
OpenAPI (antes Swagger) genera documentación interactiva para las API. En .NET 9, AddOpenApi() está integrado. Para versiones anteriores, use Swashbuckle.AspNetCore.
Adición de Swagger con Swashbuckle
Instale Swashbuckle, configúrelo en los servicios y agregue el middleware para servir la especificación y la interfaz de usuario de 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();
}Anotación de endpoints para OpenAPI
Use Produces, ProducesProblem, WithSummary y WithDescription para enriquecer la especificación de OpenAPI generada.
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");Versionado de API con grupos de rutas
Una estrategia sencilla de versionado consiste en usar grupos de rutas con la versión como prefijo. No se necesita ningún paquete adicional para el versionado básico.
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 para el versionado mediante encabezados o consultas
El paquete Asp.Versioning.Http agrega versionado mediante cadenas de consulta, encabezados y segmentos de URL a las API Minimal, con integración completa con 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);Generación de una especificación independiente por versión
Configure Swashbuckle para generar documentos de OpenAPI independientes para cada versión, de modo que los consumidores vean solo los endpoints relevantes para su versión.
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");
});Publicación de un binario autocontenido
Publique su API Minimal como un único binario autocontenido: no se necesita el runtime de .NET en la máquina de destino.
# 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=trueContenerización con Docker
Empaquete la API en una imagen de Docker mediante las imágenes base oficiales de .NET. Un Dockerfile de varias etapas mantiene reducido el tamaño de la imagen final.
# 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-apiImplementación en Azure App Service
Implemente directamente en Azure App Service desde la CLI. El servicio gestiona el escalado, los certificados y los dominios personalizados.
# 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 myRGComprobaciones de estado
Agregue endpoints de comprobación de estado para que los orquestadores (Kubernetes, Azure) puedan verificar que su API está activa y lista para atender tráfico.
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")
});Caso real: lista de comprobación para producción
Una API Minimal en producción debe incluir esta configuración para garantizar la corrección, la observabilidad y la seguridad.
// 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();Comprobación rápida
¿Qué método hace visibles los metadatos de los endpoints (Produces, WithSummary, etc.) para las herramientas de OpenAPI en las API Minimal?
Resumen: OpenAPI, versionado e implementación
Puntos clave:
- AddEndpointsApiExplorer + Swashbuckle = interfaz de usuario de Swagger para las API Minimal
- Anote con Produces, WithSummary y WithTags para obtener documentación de OpenAPI detallada
- Versionado sencillo mediante grupos de rutas; Asp.Versioning para escenarios avanzados
- Publique un binario autocontenido o una imagen de Docker para una implementación flexible
- Agregue comprobaciones de estado para los sondeos de preparación de Kubernetes/Azure
Preguntas frecuentes
¿La lección «OpenAPI, versionado y despliegue» es gratis?
Sí — el texto completo de «OpenAPI, versionado y despliegue» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C# Academy, actualiza a CoddyKit PRO. El curso de C# Academy incluye 4 lecciones en total.
¿Qué aprenderé en «OpenAPI, versionado y despliegue»?
Genere documentación de Swagger/OpenAPI, versione las API y despliegue una Minimal API en Azure App Service o en contenedores. Practicas C# Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar C# Academy?
No se requiere experiencia previa. C# Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.
¿Cuánto tiempo toma la lección «OpenAPI, versionado y despliegue»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de C# Academy?
Sí. Cada lección de C# Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Creación de su primera Minimal API
- Grupos de rutas, parámetros y validación
- Middleware y filtros en Minimal APIs
- OpenAPI, versionado y despliegue