806 palabras
4 minutos
Cómo usar Swagger en un proyecto Web API con .NET 9

Introducción#

Cuando creamos un proyecto Web API en .NET 9, seguro notamos que algo falta: Swagger UI desapareció del template y en su lugar Microsoft incluyó su propio paquete OpenAPI, que genera la especificación pero sin la interfaz gráfica a la que estábamos acostumbrados; en este artículo vamos a revisar por qué hicieron este cambio, cómo podemos volver a usar Swagger y qué alternativa podemos aprovechar para documentar nuestras APIs.

¿Qué es OpenAPI?#

Antes de abordar el tema de .NET 9 y Swagger, es importante que entendamos qué es OpenAPI y por qué es relevante en este contexto.

OpenAPI es un estándar abierto para documentar APIs REST. En pocas palabras: es un formato (generalmente un JSON o YAML) que nos permite explicar de manera clara y estructurada cómo funciona nuestra API.

Por ejemplo, nos permite documentar:

  • Qué endpoints tenemos (/users, /products, etc.)
  • Qué parámetros esperan nuestros endpoints
  • Qué respuestas devuelven (200, 404, 500…)
  • Qué modelos de datos utilizamos

A partir de este formato estándar, diversas herramientas como Swagger UI pueden leer el archivo OpenAPI y generar una interfaz gráfica interactiva que permite a los desarrolladores probar y entender nuestra API de manera sencilla.

Las razones detrás de este cambio#

El principal motivo fue que el proyecto Swashbuckle no cuenta con un mantenimiento tan activo y, además, no ha lanzado una versión oficial para .NET 8. Esto obligaba a Microsoft a depender de librerías externas que no siempre se actualizan al ritmo de los nuevos lanzamientos de .NET.

Por esta razón, decidieron crear Microsoft.AspNetCore.OpenApi, un paquete oficial que genera documentos OpenAPI sin depender de herramientas de terceros. De esta manera, Microsoft puede asegurar lanzamientos más rápidos y confiables que estén alineados con cada nueva versión del framework.

IMPORTANT

No es que Swagger “haya muerto”, simplemente Microsoft dejó de incluirlo por defecto en las plantillas de proyecto.

En el siguiente enlace se puede ver la discusión oficial en GitHub sobre este cambio: GitHub Discussion

Cómo volver a usar Swagger UI en .NET 9#

Swagger UI sigue siendo una de las herramientas más populares y útiles para documentar APIs, y muchos desarrolladores estamos familiarizados con su interfaz intuitiva y funcionalidades. La buena noticia es que podemos seguir utilizándola en .NET 9 sin mayor complicación. Para ello debemos de seguir los siguientes pasos:

  1. Instalamos el paquete NuGet:
Terminal window
dotnet add package Swashbuckle.AspNetCore
dotnet add package Swashbuckle.AspNetCore.Annotations
  1. Configuramos Swagger en Program.cs:
var builder = WebApplication.CreateBuilder(args);
// other services...
// add Swagger service
builder.Services.AddSwaggerGen(options =>
{
options.SwaggerDoc("v1", new OpenApiInfo()
{
Version = "v1",
Title = "Example API Reference",
Description = "Example API documentation for my Web API",
});
options.EnableAnnotations();
});
var app = builder.Build();
if (app.Environment.IsDevelopment())
{
// enable Swagger middlewares
app.UseSwagger();
app.UseSwaggerUI();
}
// other middlewares...
app.Run();
  1. Usamos los atributos de Swashbuckle.AspNetCore.Annotations para documentar nuestros endpoints:
[HttpGet("{id}")]
[SwaggerOperation(
Summary = "Get item by ID",
Description = "Retrieves an item by its unique identifier"
)]
public ActionResult<ItemResponse> GetItem([SwaggerParameter("Item ID")] int id)
{
// implementation...
}
  1. Actualizamos launchSettings.json para abrir Swagger UI automáticamente al iniciar la aplicación (opcional):
{
"$schema": "https://json.schemastore.org/launchsettings.json",
"profiles": {
"http": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"launchUrl": "swagger",
"applicationUrl": "http://localhost:5102",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"https": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"launchUrl": "swagger",
"applicationUrl": "https://localhost:7175;http://localhost:5102",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}
  1. Ejecutamos la aplicación y esta navegará automáticamente hacia https://localhost:<puerto>/swagger para ver la interfaz de Swagger UI

Swagger UI

Usando Scalar, una gran alternativa a Swagger UI#

Si buscamos algo diferente, una alternativa interesante es Scalar, una herramienta de documentación de APIs que en este caso se complementa muy bien con el nuevo paquete Microsoft.AspNetCore.OpenApi y ofrece una interfaz moderna y amigable. Veamos cómo integrarlo en nuestro proyecto:

  1. Instalamos el paquete NuGet:
Terminal window
dotnet add package Scalar.AspNetCore
  1. Configuramos Scalar en Program.cs:
var builder = WebApplication.CreateBuilder(args);
// other services...
// use Microsoft OpenApi service
builder.Services.AddOpenApi();
var app = builder.Build();
if (app.Environment.IsDevelopment())
{
// use OpenAPI endpoint
app.MapOpenApi();
// enable Scalar middleware
app.MapScalarApiReference(options =>
{
options.Title = "Example API Reference";
options.Theme = ScalarTheme.BluePlanet;
});
}
// other middlewares...
app.Run();
  1. Usamos metadatos de OpenAPI para documentar nuestros endpoints:
[HttpGet("{id}")]
[EndpointSummary("Get item by ID")]
[EndpointDescription("Retrieves an item by its unique identifier")]
public ActionResult<ItemResponse> GetItem([Description("Item ID")] int id)
{
// implementation...
}
NOTE

Podemos ver todos los atributos disponibles en la documentación oficial de ASP.NET Core.

  1. Actualizamos launchSettings.json para abrir Scalar automáticamente al iniciar la aplicación (opcional):
{
"$schema": "https://json.schemastore.org/launchsettings.json",
"profiles": {
"http": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"launchUrl": "scalar",
"applicationUrl": "http://localhost:5102",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"https": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"launchUrl": "scalar",
"applicationUrl": "https://localhost:7175;http://localhost:5102",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}
  1. Ejecutamos la aplicación y esta navegará automáticamente hacia https://localhost:<puerto>/scalar para ver la interfaz de Scalar

Scalar UI

Conclusión#

Aunque Swagger UI ya no viene por defecto en los proyectos Web API con .NET 9, aún podemos usarlo fácilmente instalando el paquete Swashbuckle. Alternativamente, podemos explorar nuevas herramientas como Scalar que ofrecen interfaces modernas para documentar nuestras APIs. Lo importante es entender que OpenAPI sigue siendo el estándar para describir nuestras APIs y hay varias opciones para generar documentación interactiva a partir de él.

Cómo usar Swagger en un proyecto Web API con .NET 9
https://blog.miikuru002.dev/posts/use-swagger-on-net9/
Autor
J. Ortega
Publicado el
2025-09-13
Licencia
CC BY-NC-SA 4.0