Crea APIs Minimalistas en .NET 8 con C# paso a paso

Crea APIs Minimalistas en .NET 8 con C# paso a paso

Crear una API REST con Minimal APIs en .NET 8 y C#: Guía paso a paso para CRUD, EF Core, JWT, Swagger y Docker

Meta title sugerido: Tutorial Minimal APIs .NET 8: API REST C# con EF Core, JWT y Swagger

Meta description sugerida: Aprende a crear una API REST en C# con Minimal APIs en .NET 8: CRUD, Entity Framework Core, SQLite/SQL Server, Swagger/OpenAPI, autenticación JWT, pruebas con xUnit y despliegue con Docker y Azure.

URL slug sugerido: tutorial-minimal-apis-dotnet-8-api-rest-csharp

1. Requisitos e instalación

En este tutorial Minimal APIs .NET 8 aprenderás a construir una API REST C# completa: CRUD, Entity Framework Core, Swagger .NET 8, JWT, pruebas y Docker. Comencemos instalando el SDK y herramientas.

1.1. Instalar .NET 8 SDK

  • Descarga: https://dotnet.microsoft.com/download/dotnet/8.0
  • Verifica instalación:

1.2. IDE/Editor recomendado

  • Visual Studio 2022 17.8+ (Workload: ASP.NET and web development)
  • Visual Studio Code + extensiones: C#, C# Dev Kit, NuGet Gallery

1.3. Herramientas adicionales

  • Git
  • Docker Desktop (para contenedorización y pruebas locales)
  • EF Core CLI:

Checklist

  • [ ] .NET 8 instalado y verificado
  • [ ] Editor listo (VS o VS Code)
  • [ ] Docker Desktop corriendo
  • [ ] dotnet-ef instalado

2. Crear la solución y proyecto

Crearemos una API llamada MinimalApiDemo.

Agrega paquetes necesarios:

Estructura de carpetas recomendada:

Checklist

  • [ ] Proyecto web creado
  • [ ] Paquetes NuGet agregados
  • [ ] Carpetas base creadas

3. Configuración base (appsettings y variables de entorno)

Archivo appsettings.json:

Notas

  • Puedes cambiar DbProvider a SqlServer para usar SQL Server.
  • Para producción, sobreescribe valores con variables de entorno (por ejemplo, JWT__Secret).

Checklist

  • [ ] appsettings.json con conexión y JWT configurado
  • [ ] Decidido proveedor de base de datos (SQLite o SQL Server)

4. Dominio, DTOs y mapeo

4.1. Entidad de dominio con Data Annotations

Archivo Domain/Product.cs:

4.2. DTOs y mapeos

Archivo DTOs/ProductDtos.cs:

Archivo DTOs/Mappings.cs:

Checklist

  • [ ] Entidad creada con Data Annotations
  • [ ] DTOs definidos
  • [ ] Mapeos implementados

5. Entity Framework Core: DbContext, migraciones y seeding

5.1. DbContext

Archivo Data/AppDbContext.cs:

5.2. Seeding

Archivo Data/Seed.cs:

5.3. Registrar DbContext y aplicar migraciones en Program.cs

Archivo Program.cs (versión completa más abajo) tendrá algo como:

Crear y aplicar migraciones:

Checklist

  • [ ] DbContext registrado
  • [ ] Migración creada y aplicada
  • [ ] Datos iniciales seed en base

6. Validación: Data Annotations y FluentValidation

Archivo Validation/ProductValidators.cs:

Uso: inyecta IValidator y valida antes de procesar.

Checklist

  • [ ] Validadores de FluentValidation creados
  • [ ] Reglas coherentes con Data Annotations

7. Middleware global de errores y logging

Archivo Middleware/ErrorHandlingMiddleware.cs:

Regístralo en Program.cs con app.UseMiddleware();

Checklist

  • [ ] Middleware de errores agregado
  • [ ] ILogger configurado por defecto

8. Endpoints CRUD con Minimal APIs (paginación y filtros)

Archivo Endpoints/ProductsEndpoints.cs:

Ejemplos de requests/responses (cURL):

Checklist

  • [ ] CRUD mapeado en rutas /api/v1/products
  • [ ] Paginación y búsqueda por query string
  • [ ] Validación y logging en operaciones de escritura

9. Swagger/OpenAPI con Swashbuckle

Configura servicios en Program.cs:

En desarrollo activa Swagger UI:

Checklist

  • [ ] Swagger habilitado con esquema de seguridad Bearer
  • [ ] Probar endpoints desde Swagger UI

10. Autenticación y autorización con JWT

Archivo Auth/JwtSettings.cs:

Archivo Auth/AuthEndpoints.cs (emite un token de ejemplo; en producción valida contra tu base de usuarios):

Config en Program.cs:

Checklist

  • [ ] Endpoint /api/v1/auth/login devuelve JWT
  • [ ] Políticas de autorización definidas (AdminOnly)
  • [ ] CRUD protegido con RequireAuthorization

11. CORS y versionado de API

Activa CORS para frontends específicos:

Versionado: En este tutorial usamos la versión en la ruta (/api/v1/…). Para versionado avanzado considera Asp.Versioning.Http.

Checklist

  • [ ] CORS habilitado con orígenes permitidos
  • [ ] Rutas con prefijo /api/v1

12. Program.cs completo

Archivo Program.cs:

Checklist

  • [ ] Program.cs compila y ejecuta
  • [ ] Swagger disponible en /swagger

13. Pruebas unitarias e integración con xUnit y WebApplicationFactory

Crear proyecto de pruebas:

Prueba unitaria simple (DTO mapping):

Prueba de integración con WebApplicationFactory (in-memory SQLite):

Checklist

  • [ ] Proyecto de pruebas agregado a la solución
  • [ ] Pruebas unitarias y de integración ejecutan: dotnet test

14. Docker: Dockerfile y docker-compose

Archivo Dockerfile (en MinimalApiDemo.Api):

Archivo docker-compose.yml (en raíz de la solución) con SQL Server opcional:

Construir y ejecutar:

Checklist

  • [ ] Imagen Docker construida
  • [ ] API accesible en http://localhost:8080/swagger

15. Configuración por entornos

  • appsettings.Development.json para overrides locales.
  • Variables de entorno para producción (prefijo secciones con doble guion bajo: Jwt__Secret).
  • ASPNETCORE_ENVIRONMENT controla qué appsettings se cargan.

Ejemplo ejecución local con variables:

Checklist

  • [ ] Entornos configurados (Development/Production)
  • [ ] Secretos sensibles via variables/env

16. Despliegue rápido (Azure App Service o contenedor)

Opción A: Contenedor

1) Publica imagen en un registry (Docker Hub/Azure Container Registry):

2) Crea App Service for Containers y apunta a tu imagen. Configura variables de entorno: DbProvider, ConnectionStrings…, Jwt

Opción B: Publish directo (código)

  • En Visual Studio: Publish > Azure > Azure App Service > Configura ConnectionStrings y variables de app.

Checklist

  • [ ] Imagen publicada en registry
  • [ ] App configurada con variables y conexión

17. FAQ (orientada a featured snippets)

  • ¿Qué es una Minimal API en .NET 8?
    Una Minimal API es una forma ligera de construir endpoints HTTP en ASP.NET Core usando mínima configuración y un modelo de hosting simplificado, ideal para microservicios y APIs REST.

  • ¿Cómo documento una Minimal API con Swagger .NET 8?
    Agrega AddEndpointsApiExplorer y AddSwaggerGen, habilita UseSwagger/UseSwaggerUI y define el esquema Bearer para JWT.

  • ¿Cómo implementar autenticación JWT?
    Configura AddAuthentication con JwtBearer, valida issuer/audience/signing key y expón un endpoint de login que emita tokens.

  • ¿Puedo usar Entity Framework Core con SQLite y SQL Server?
    Sí. Registra AppDbContext con UseSqlite o UseSqlServer según un flag (DbProvider) y gestiona migraciones con dotnet ef.

  • ¿Cómo hago paginación y filtros?
    Acepta parámetros page, pageSize, search en el endpoint y aplica Skip/Take y Where en la consulta LINQ.

18. Resolución de problemas comunes

  • Error: The Entity Framework tools version is older/newer than runtime.
    Ejecuta: dotnet tool update –global dotnet-ef y asegura paquetes EF Core 8.x.

  • Error de CORS (blocked by CORS policy).
    Verifica orígenes en appsettings (Cors:AllowedOrigins) y que UseCors está antes de los endpoints.

  • 401 Unauthorized al llamar endpoints protegidos.
    Asegura enviar Authorization: Bearer {token} y que el token incluye el rol Admin si la política lo requiere.

  • No se aplica migración en contenedor.
    Confirma que app realiza db.Database.Migrate() al iniciar y que la cadena de conexión es correcta (host db en compose).

  • Clave JWT demasiado corta.
    Usa una clave >= 32 caracteres para HMAC-SHA256.

  • SQLite locked database en Docker.
    Monta volumen persistente o cambia a SQL Server en compose para concurrencia.

19. Buenas prácticas y conclusiones

Buenas prácticas

  • Valida todas las entradas con FluentValidation y Data Annotations.
  • Usa DTOs para no exponer entidades directamente.
  • Centraliza manejo de errores con middleware y registra logs con ILogger.
  • Configura CORS de forma restrictiva en producción.
  • Separa por capas/carpetas claras y añade tests con xUnit y WebApplicationFactory.
  • Documenta la API con Swagger/OpenAPI y ejemplos de uso.
  • Usa variables de entorno para secretos y connection strings.
  • Conteneriza con Docker y automatiza despliegues (CI/CD) hacia Azure App Service u otro destino.

Conclusión

Has construido una .NET 8 Minimal API CRUD con Entity Framework Core, Swagger .NET 8, autenticación JWT, CORS, logging, validación, pruebas y Docker. Este tutorial Minimal APIs .NET 8 te deja con una base sólida para producir una API REST C# lista para desarrollo y despliegue. ¿Próximo paso? Amplía el dominio, agrega versionado formal con Asp.Versioning.Http, integra métricas (OpenTelemetry) y habilita CI/CD. Si te ha sido útil, compártelo y considera suscribirte para más guías avanzadas de .NET 8 Minimal API CRUD.