Introducción: API REST en C# — es sencillo
\nAPI REST (Transferencia de Estado Representacional) es un estilo arquitectónico para crear servicios web que hoy en día se utiliza en prácticamente todas las aplicaciones modernas. Si quieres aprender rápidamente a escribir backend en C#, entonces ASP.NET Core es la mejor opción para empezar. En este artículo crearemos en 30 minutos una API REST completa para gestionar una lista de tareas (Todo List). Aprenderás cómo configurar el proyecto, escribir controladores, conectar la base de datos y probar la API a través de Swagger.
\n¿Listo? ¡Vamos allá!
\n\nPaso 1: Creación del proyecto y configuración del entorno
\nLo primero que necesitamos es tener instalado el .NET SDK (versión 6.0 o superior). Puedes descargarlo desde el sitio oficial de Microsoft. Después de la instalación, abre la terminal o línea de comandos y crea un nuevo proyecto:
\ndotnet new webapi -n TodoApi\ncd TodoApi\nEste comando creará una plantilla de web API con Swagger preinstalado. Abre el proyecto en Visual Studio Code o cualquier otro IDE. La estructura del proyecto ya incluye las carpetas Controllers, Models y el archivo Program.cs.
Ahora agreguemos soporte para Entity Framework Core para trabajar con la base de datos. Instalaremos los paquetes necesarios:
\ndotnet add package Microsoft.EntityFrameworkCore.InMemory\ndotnet add package Microsoft.EntityFrameworkCore.Design\nUsamos una base de datos InMemory para simplificar: los datos se almacenarán en la memoria RAM. Para producción, puedes reemplazarla por SQL Server o PostgreSQL.
\n\nPaso 2: Creación del modelo de datos y contexto de BD
\nCreemos el modelo TodoItem. En la carpeta Models, crea el archivo TodoItem.cs:
namespace TodoApi.Models;\n\npublic class TodoItem\n{\n public long Id { get; set; }\n public string? Title { get; set; }\n public bool IsComplete { get; set; }\n}\nAhora creemos el contexto de la base de datos. En la carpeta Data (si no existe, créala) agrega el archivo TodoContext.cs:
using Microsoft.EntityFrameworkCore;\nusing TodoApi.Models;\n\nnamespace TodoApi.Data;\n\npublic class TodoContext : DbContext\n{\n public TodoContext(DbContextOptions<TodoContext> options) : base(options) { }\n public DbSet<TodoItem> TodoItems { get; set; }\n}\nRegistremos el contexto en Program.cs:
using Microsoft.EntityFrameworkCore;\nusing TodoApi.Data;\n\nvar builder = WebApplication.CreateBuilder(args);\n\nbuilder.Services.AddDbContext<TodoContext>(opt =>\n opt.UseInMemoryDatabase("TodoList"));\n\nbuilder.Services.AddControllers();\nbuilder.Services.AddEndpointsApiExplorer();\nbuilder.Services.AddSwaggerGen();\n\nvar app = builder.Build();\n\nif (app.Environment.IsDevelopment())\n{\n app.UseSwagger();\n app.UseSwaggerUI();\n}\n\napp.UseHttpsRedirection();\napp.UseAuthorization();\napp.MapControllers();\napp.Run();\n\nPaso 3: Escritura del controlador con operaciones CRUD
\nCreemos el controlador para trabajar con las tareas. En la carpeta Controllers, agrega el archivo TodoItemsController.cs:
using Microsoft.AspNetCore.Mvc;\nusing Microsoft.EntityFrameworkCore;\nusing TodoApi.Data;\nusing TodoApi.Models;\n\nnamespace TodoApi.Controllers;\n\n[Route("api/[controller]")]\n[ApiController]\npublic class TodoItemsController : ControllerBase\n{\n private readonly TodoContext _context;\n\n public TodoItemsController(TodoContext context)\n {\n _context = context;\n }\n\n // GET: api/TodoItems\n [HttpGet]\n public async Task<ActionResult<IEnumerable<TodoItem>>> GetTodoItems()\n {\n return await _context.TodoItems.ToListAsync();\n }\n\n // GET: api/TodoItems/5\n [HttpGet("{id}")]\n public async Task<ActionResult<TodoItem>> GetTodoItem(long id)\n {\n var todoItem = await