Introducción
El desarrollo web moderno es impensable sin una API REST. Es la base sobre la que se construyen aplicaciones móviles, frontends SPA y microservicios. Si eres principiante y quieres aprender rápidamente a crear un backend, la combinación TypeScript + Express es el inicio ideal. TypeScript añade tipado estricto a JavaScript, lo que hace que el código sea más fiable y comprensible, especialmente al trabajar en equipo.
En esta guía, crearemos en 30 minutos una API REST completa para gestionar una lista de tareas (Todo list). Aprenderás a configurar el proyecto, describir modelos de datos, crear rutas y conectar una base de datos. Sin teoría innecesaria: solo práctica y código listo para ejecutar.
Se asume que ya tienes instalados Node.js (versión 18+) y npm. Si no es así, descárgalos desde el sitio oficial.
1. Preparación del proyecto e instalación de dependencias
Empezamos inicializando un nuevo proyecto TypeScript. Abre la terminal y ejecuta los comandos:
mkdir my-todo-apicd my-todo-apinpm init -yAhora instalamos los paquetes necesarios:
npm install expressnpm install -D typescript @types/node @types/express ts-node nodemonCreemos el archivo de configuración de TypeScript:
npx tsc --initEn el archivo tsconfig.json, asegúrate de que las siguientes líneas estén descomentadas y configuradas:
{ "compilerOptions": { "target": "ES2020", "module": "commonjs", "outDir": "./dist", "rootDir": "./src", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true }, "include": ["src/**/*"], "exclude": ["node_modules", "dist"]}Crea la carpeta src y el archivo src/index.ts — este será el punto de entrada de nuestra aplicación.
Añadimos scripts en package.json para una ejecución cómoda:
"scripts": { "dev": "nodemon --exec ts-node src/index.ts", "build": "tsc", "start": "node dist/index.js"}2. Creación del servidor básico con Express
Ahora escribimos un servidor mínimo con Express que escuchará en el puerto 3000. Abre src/index.ts y añade el siguiente código:
import express, { Request, Response } from 'express';
const app = express();const PORT = 3000;
// Middleware para parsear JSONapp.use(express.json());
// Ruta básica para verificarapp.get('/', (req: Request, res: Response) => { res.send('¡La API Todo está funcionando!');});
app.listen(PORT, () => { console.log(`Servidor iniciado en http://localhost:${PORT}`);});Ejecuta el servidor con el comando npm run dev y abre el navegador en http://localhost:3000. Deberías ver el mensaje "¡La API Todo está funcionando!".
3. Definición del modelo de datos y almacenamiento en memoria
Para simplificar, no conectaremos una base de datos de inmediato, sino que usaremos un almacenamiento temporal en memoria RAM. Crea el archivo src/models/todo.ts:
export interface Todo { id: number; title: string; completed: boolean; createdAt: Date;}
export let todos: Todo[] = [ { id: 1, title: 'Aprender TypeScript', completed: false, createdAt: new Date() }, { id: 2, title: 'Escribir una API REST', completed: false, createdAt: new Date() },];Observa el uso de la interfaz Todo — esto garantiza que todos los objetos en el array tengan la misma estructura.
4. Implementación de rutas CRUD
Creemos el archivo src/routes/todos.ts con rutas completas para las operaciones Create, Read, Update y Delete.
import { Router, Request, Response } from 'express';import { Todo, todos } from '../models/todo';
const router = Router();
// GET /api/todos — obtener todas las tareasrouter.get('/', (req: Request, res: Response) => { res.