🧠 Meta descripción:
Aprende paso a paso cómo crear una API REST en .NET 9 con C#, siguiendo buenas prácticas y ejemplos reales actualizados a 2025.
🧩 Introducción
Como desarrollador e instructor técnico con años de experiencia enseñando desarrollo web, backend y frontend con tecnologías como .NET, React y WordPress, he visto cómo las APIs REST se convirtieron en la columna vertebral de casi todas las aplicaciones modernas.
En 2025, .NET 9 se consolida como una de las plataformas más potentes y eficientes para construir APIs escalables, rápidas y seguras. En este tutorial práctico aprenderás cómo crear una API REST en .NET 9 paso a paso, aplicando buenas prácticas de arquitectura y código limpio, con ejemplos reales que puedes usar en tus propios proyectos.
🔍 ¿Qué es una API REST?
Una API REST (Representational State Transfer) es una interfaz que permite la comunicación entre sistemas mediante peticiones HTTP (GET, POST, PUT, DELETE).
Por ejemplo, una app hecha en React puede consumir datos de una API hecha en .NET para mostrar usuarios, productos o posts de un blog.
En .NET 9, las APIs REST se crean usando ASP.NET Core Web API, que ofrece herramientas modernas para construir servicios rápidos y fáciles de mantener.
🚀 ¿Por qué es importante en 2025?
En 2025, las empresas buscan arquitecturas modulares y escalables, donde cada parte del sistema (frontend, backend, microservicios) se comunique mediante APIs.
Además, .NET 9 incluye mejoras como:
- Rendimiento optimizado gracias a Native AOT (Ahead-of-Time compilation).
- Minimal APIs aún más limpias y rápidas de configurar.
- Soporte completo para OpenAPI/Swagger y herramientas modernas de documentación.
- Integración nativa con IA, Azure y Blazor.
Aprender a crear una API REST moderna en .NET 9 te da una ventaja competitiva enorme en el mercado actual.
⚙️ Paso a paso: cómo crear una API REST en .NET 9
🧱 Paso 1: Crear el proyecto
Abre tu terminal y ejecuta:
dotnet new webapi -n ApiRestDemo
cd ApiRestDemo
Este comando crea un proyecto base con controladores, configuración Swagger y estructura lista para usar.
🧩 Paso 2: Revisar la estructura del proyecto
La estructura inicial debería verse así:
ApiRestDemo/
├── Controllers/
│ └── WeatherForecastController.cs
├── Program.cs
├── appsettings.json
└── ApiRestDemo.csproj
El archivo Program.cs contiene la configuración principal de tu API.
⚡ Paso 3: Crear un modelo y un controlador real
Crea una carpeta llamada Models y dentro un archivo Product.cs:
namespace ApiRestDemo.Models
{
public class Product
{
public int Id { get; set; }
public string Name { get; set; } = string.Empty;
public decimal Price { get; set; }
}
}
Ahora, crea un nuevo controlador llamado ProductsController.cs dentro de Controllers:
using Microsoft.AspNetCore.Mvc;
using ApiRestDemo.Models;
namespace ApiRestDemo.Controllers
{
[ApiController]
[Route("api/[controller]")]
public class ProductsController : ControllerBase
{
private static readonly List<Product> _products = new()
{
new Product { Id = 1, Name = "Laptop", Price = 999.99m },
new Product { Id = 2, Name = "Teclado Mecánico", Price = 120.00m }
};
[HttpGet]
public IActionResult GetAll() => Ok(_products);
[HttpGet("{id}")]
public IActionResult GetById(int id)
{
var product = _products.FirstOrDefault(p => p.Id == id);
return product == null ? NotFound() : Ok(product);
}
[HttpPost]
public IActionResult Create(Product product)
{
product.Id = _products.Max(p => p.Id) + 1;
_products.Add(product);
return CreatedAtAction(nameof(GetById), new { id = product.Id }, product);
}
[HttpPut("{id}")]
public IActionResult Update(int id, Product updatedProduct)
{
var product = _products.FirstOrDefault(p => p.Id == id);
if (product == null) return NotFound();
product.Name = updatedProduct.Name;
product.Price = updatedProduct.Price;
return NoContent();
}
[HttpDelete("{id}")]
public IActionResult Delete(int id)
{
var product = _products.FirstOrDefault(p => p.Id == id);
if (product == null) return NotFound();
_products.Remove(product);
return NoContent();
}
}
}
Con esto ya tienes una API REST funcional que soporta las operaciones CRUD completas.
🔥 Paso 4: Ejecutar y probar la API
Ejecuta el proyecto con:
dotnet run
Luego abre tu navegador y visita
https://localhost:5001/swagger
Ahí verás la documentación automática generada por Swagger.
Puedes probar los endpoints directamente desde ahí.
🧠 Buenas prácticas al crear APIs en .NET 9
- Usa DTOs (Data Transfer Objects) para no exponer tus entidades directamente.
- Implementa validaciones con
[Required],[StringLength], etc. - Utiliza inyección de dependencias para manejar servicios y repositorios.
- Configura CORS correctamente si tu API será consumida por un frontend (por ejemplo, React o Blazor).
- Implementa logs y manejo global de errores usando
UseExceptionHandler.
Ejemplo de validación simple en el modelo:
public class ProductDto
{
[Required]
public string Name { get; set; } = string.Empty;
[Range(0.01, double.MaxValue)]
public decimal Price { get; set; }
}
⚠️ Errores comunes y cómo evitarlos
| Error | Solución |
|---|---|
No registrar los servicios en Program.cs | Asegúrate de usar builder.Services.AddControllers(); |
| No probar la API con Swagger | Usa app.UseSwagger(); app.UseSwaggerUI(); |
| No validar datos de entrada | Implementa [ApiController] para validaciones automáticas |
| Mezclar lógica de negocio en controladores | Crea servicios y repositorios separados |
❓ Preguntas frecuentes (FAQs)
1. ¿Puedo usar Entity Framework con .NET 9?
Sí, .NET 9 incluye soporte completo para Entity Framework Core 9, ideal para bases de datos SQL y NoSQL.
2. ¿Cómo despliego esta API en producción?
Puedes usar Azure App Service, AWS Elastic Beanstalk o Docker con un contenedor minimalista.
3. ¿Puedo combinar esta API con un frontend en React o Blazor?
Por supuesto. React, Angular y Blazor WebAssembly consumen fácilmente APIs REST mediante fetch o HttpClient.

