Cómo escribir una API REST en C# en 30 minutos: guía paso a paso

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Introducción: API REST en C# — es sencillo

\n

API 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\n

Paso 1: Creación del proyecto y configuración del entorno

\n

Lo 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:

\n
dotnet new webapi -n TodoApi\ncd TodoApi
\n

Este 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.

\n

Ahora agreguemos soporte para Entity Framework Core para trabajar con la base de datos. Instalaremos los paquetes necesarios:

\n
dotnet add package Microsoft.EntityFrameworkCore.InMemory\ndotnet add package Microsoft.EntityFrameworkCore.Design
\n

Usamos 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\n

Paso 2: Creación del modelo de datos y contexto de BD

\n

Creemos el modelo TodoItem. En la carpeta Models, crea el archivo TodoItem.cs:

\n
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}
\n

Ahora creemos el contexto de la base de datos. En la carpeta Data (si no existe, créala) agrega el archivo TodoContext.cs:

\n
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}
\n

Registremos el contexto en Program.cs:

\n
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\n

Paso 3: Escritura del controlador con operaciones CRUD

\n

Creemos el controlador para trabajar con las tareas. En la carpeta Controllers, agrega el archivo TodoItemsController.cs:

\n
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                

Blogs

Book Recommendations