Minimal APIs + EF Core: una API .NET 8 limpia
Program.cs .
Estructurar con route groups
app.MapGet en el Program.cs . La solución se resume en una palabra: `MapGroup` . Cada recurso tiene su grupo, con su prefijo, sus filtros y sus metadatos, definido en un método de extensión dedicado:
Program.cs se reduce entonces a app.MapTodos(); — un punto de entrada por recurso, el resto vive en archivos coherentes.
DbContext y migraciones
DbContext mediante AddDbContext , se modela en OnModelCreating , y sobre todo nunca se deja que el esquema derive manualmente: cada cambio pasa por una migración versionada.
dotnet ef migrations add InitialCreate , y se aplica al arranque con db.Database.MigrateAsync() — nunca EnsureCreated , que cortocircuita todo el historial. La documentación oficial detalla el flujo de trabajo en la guía de migraciones de EF Core .
Resultados tipados y validación
IActionResult opaco, se retorna una unión de resultados tipados : la firma documenta los códigos HTTP posibles, y OpenAPI los expone automáticamente.
Results<Created<Todo>, ValidationProblem> es autodocumentado : no hacen falta atributos [ProducesResponseType] redundantes.
Mantener todo testeable
AppDbContext sobre el proveedor in-memory o SQLite, se llama al handler y se inspecciona el TypedResults . Para los tests de integración de extremo a extremo, WebApplicationFactory<T> levanta la aplicación completa en memoria y permite invocar los endpoints reales.
Una Minimal API no es una API de segunda categoría. Bien estructurada en grupos y en resultados tipados, expone menos ceremonia para más garantías — y eso es exactamente lo que se espera de un framework moderno.