aspnetcore-minimal-api

Qué es y cómo usar Minimal API en ASP.NET

  • 3 min

Las Minimal APIs son un enfoque simplificado para construir APIs HTTP en ASP.NET, ofreciendo una sintaxis concisa y funcional.

Son una característica introducida con .NET 6 para crear APIs RESTful con un mínimo de código y configuración. (igual que hacen muchos otros frameworks).

Este enfoque elimina la necesidad de controladores tradicionales, y nos permite definir endpoints directamente en el archivo de configuración principal.

¿Cuándo Usarlas?

  • ✅ APIs con pocos endpoints (ej: microservicios).
  • ✅ Prototipado rápido.
  • ✅ Integración con frontends modernos (React, Vue, Angular).

### **Cuándo evitarlas** - ❌ Proyectos grandes con **lógica compleja** (mejor usar Controller-based APIs).

Cómo usar minimal APIs

Para empezar a usar minimal APIs, simplemente tenemos que crear un proyecto usando la plantilla adecuada.

dotnet new web -o MinimalApiDemo
cd MinimalApiDemo

Este comando creará un nuevo proyecto Minimal API con la estructura básica de carpetas y archivos necesarios.

Si ahora miramos el fichero Program.cs, veremos que ya contiene un primer esbozo de una Minimal APIs,

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapGet("/", () => "Bienvenido a mi minimal API mimal");

app.Run();

Como vemos, únicamente tiene un mapeo para Root que devuelve el texto Bienvenido a mi minimal API mimal

Podemos usar esto de base y sustituirlo por nuestros propios endpoints. 👇

Definición de Endpoints

En Minimal API, los endpoints se definen directamente en Program.cs usando métodos como MapGet, MapPost, etc. Estos métodos son.

Verbo HTTPMétodo Minimal APIDescripción
GETMapGetObtener datos
POSTMapPostCrear un recurso
PUTMapPutActualizar un recurso
DELETEMapDeleteEliminar un recurso
PATCHMapPatchActualización parcial
HEADMapMethodsSolicitar metadatos

Aquí tenéis un ejemplo de como se usaría cada uno de ellos,

var app = WebApplication.Create();

// GET
app.MapGet("/users", () => "Lista de usuarios");

// POST
app.MapPost("/users", (User user) => Results.Created($"/users/{user.Id}", user));

// PUT
app.MapPut("/users/{id}", (int id, User user) => 
{
    // Lógica de actualización
    return Results.Ok(user);
});

// DELETE
app.MapDelete("/users/{id}", (int id) => 
{
    // Lógica de eliminación
    return Results.NoContent();
});

app.Run();

Parámetros y validación

Minimal API permite recibir parámetros de múltiples formas. ASP.NET inyecta automáticamente parámetros desde:

OrigenEjemploDescripción
Ruta/users/{id}(int id)Extrae valores de la URL
Query String/users?name=John(string name)Parámetros en la URL
Body (JSON)app.MapPost("/users", (User user) => ...)Datos en el cuerpo de la solicitud
Headers(HttpRequest req) => req.Headers["Authorization"]Encabezados HTTP
Servicios(IUserService service) => service.GetUsers()Inyección de dependencias

Por ejemplo,

app.MapGet("/search", (string name, int? page) => 
{
    // name → Query String (ej: /search?name=John)
    // page → Query String opcional (ej: /search?name=John&page=2)
    return Results.Ok(new { name, page });
});

app.MapPost("/upload", (IFormFile file) => 
{
    // Archivo enviado en el cuerpo (multipart/form-data)
    return Results.Ok($"Archivo {file.FileName} subido");
});

Integración con Dependency Injection

Minimal API soporta inyección de dependencias (DI) de forma nativa. Simplemente tenemos que hacer,

Define un servicio en su fichero.

public interface IUserService
{
   List<User> GetUsers();
}

public class UserService : IUserService
{
   public List<User> GetUsers() => new() { new User(1, "John") };
}

Regístralo en el contenedor DI

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddScoped<IUserService, UserService>();

Inyéctalo en un endpoint

app.MapGet("/users", (IUserService service) => service.GetUsers());