Resumen

Comienza con una base sólida en .NET 10 para crear una web API clara, segura y mantenible. Aquí entenderás cómo se organiza el proyecto, qué papel cumple appsettings por ambiente, cómo funciona Program.cs con el patrón builder y cuándo conviene usar controllers o la plantilla Minimal API. Todo con ejemplos directos y listos para probar.

¿Qué contiene el proyecto base en .NET 10 web API?

La plantilla inicial de .NET 10 incluye archivos y servicios clave para arrancar rápido. Identificar su propósito evita errores y acelera la configuración.

¿Para qué sirve el archivo de proyecto y el SDK?

  • Define el SDK de .NET usado por la solución.
  • Configura versión y opciones de C#.
  • Incluye el paquete de OpenAPI para documentar la API.

¿Cómo configurar appsettings por ambiente?

  • appsettings.json concentra variables como cadenas de conexión y claves para JSON Web Token.
  • Permite entradas para servicios externos: conexión a WS, integración con Azure, entre otros.
  • Soporta archivos por ambiente: appsettings.Development.json, y puedes crear Testing o Production según necesites.

Ejemplo mínimo de configuración:

{ "ConnectionStrings": { "Default": "<cadena>" }, "Jwt": { "Key": "<clave>" }, "ExternalServices": { "WsUrl": "<url>", "Azure": { "KeyVault": "<recurso>" } } }

¿Qué es el archivo http para pruebas de endpoints?

  • Es un archivo de solicitudes HTTP incluido en la plantilla.
  • Permite probar endpoints sin herramientas externas.

Ejemplo simple de prueba:

GET https://localhost:5001/weatherforecast

¿Cómo se orquesta con Program.cs y el patrón builder?

Program.cs encadena configuraciones y arranque de la API con un flujo claro: registrar servicios, construir la aplicación y ejecutar.

¿Cómo opera el patrón builder y el run?

  • Se crea un builder que agrega servicios paso a paso.
  • Se construye la app con Build y se ejecuta con Run.
  • Ventaja: configuración fluida, legible y extensible.

Ejemplo orientativo:

var builder = WebApplication.CreateBuilder(args); // Servicios de la API. builder.Services.AddControllers(); builder.Services.AddEndpointsApiExplorer(); // Soporte para OpenAPI. builder.Services.AddSwaggerGen(); var app = builder.Build(); // OpenAPI solo en desarrollo. if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); } // Aquí puedes mapear controllers o endpoints mínimos. app.Run();

¿Cómo aplica MVC sin vista en APIs?

  • El patrón MVC separa responsabilidades: modelo, vista y controlador.
  • En una API no hay interfaz gráfica: se mantiene controller y model.
  • Las URLs activan controladores y acciones; la respuesta suele ser JSON, aunque puede ser XML o archivos.

¿Cuándo usar controllers vs Minimal API y cómo mapear endpoints?

Elegir la plantilla adecuada depende del alcance y la complejidad. Entender ambos enfoques te ahorra tiempo y recursos.

¿Qué hacen los controllers con [ApiController] y [Route]?

  • [ApiController] indica que la clase expone acciones de API.
  • [Route] define la ruta base del controlador.
  • Se organizan acciones como GET, POST o DELETE en métodos claros.

Ejemplo orientativo de controller:

[ApiController] [Route("[controller]")] public class WeatherForecastController : ControllerBase { [HttpGet] public IEnumerable<object> Get() { // Datos de prueba y respuesta simulada. var datos = new[] { "Soleado", "Nublado", "Lluvioso" }; var rng = new Random(); return Enumerable.Range(1, 5).Select(_ => new { Fecha = DateTime.UtcNow.AddDays(rng.Next(1, 7)), Estado = datos[rng.Next(datos.Length)] }); } }

¿Cómo mapear rutas en Minimal API con map get, post y delete?

  • No hay carpeta Controllers: todo se define en Program.cs.
  • Mapea rutas con MapGet, MapPost y MapDelete.
  • Menos código y mejor rendimiento en APIs simples.

Ejemplo de Minimal API con rutas:

var builder = WebApplication.CreateBuilder(args); var app = builder.Build(); // GET simple. app.MapGet("/weatherforecast", () => { var datos = new[] { "Soleado", "Nublado", "Lluvioso" }; var rng = new Random(); return Enumerable.Range(1, 3).Select(_ => new { Fecha = DateTime.UtcNow.AddDays(rng.Next(1, 5)), Estado = datos[rng.Next(datos.Length)] }); }); // Reto sugerido: devolver la hora del servidor. app.MapGet("/hora", () => DateTime.UtcNow); // Otras acciones típicas. app.MapPost("/recurso", () => Results.Created("/recurso/1", new { ok = true })); app.MapDelete("/recurso/{id}", (int id) => Results.NoContent()); app.Run();

¿En qué escenarios conviene Minimal API y rendimiento?

  • Proyectos pequeños, demos o responsabilidades muy específicas.
  • Casos de solo lectura o sin operaciones complejas: ejemplo, una API pública que solo devuelve datos como departamentos, mapas o días festivos.
  • Beneficio clave: mejor rendimiento al reducir estructura y sobrecarga de controllers.

¿Qué parte te gustaría profundizar: configuración por ambientes, controllers o Minimal API? Comparte tus dudas o tu ejemplo de endpoint con la hora del servidor.