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 HTTP | Método Minimal API | Descripción |
---|---|---|
GET | MapGet | Obtener datos |
POST | MapPost | Crear un recurso |
PUT | MapPut | Actualizar un recurso |
DELETE | MapDelete | Eliminar un recurso |
PATCH | MapPatch | Actualización parcial |
HEAD | MapMethods | Solicitar 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:
Origen | Ejemplo | Descripció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());