✨ Introducción
¿Te gustaría aprender a crear una API profesional usando Node.js y TypeScript, pero sin complicarte con tiendas en línea? En este tutorial vas a construir paso a paso un CRUD completo para gestionar solicitudes de vacaciones, algo súper útil para cualquier empresa o startup.
Este proyecto es ideal si estás comenzando con Express y querés practicar la creación de endpoints, métodos HTTP, validaciones básicas, y cómo organizar tu código de forma profesional.
🧰 Requisitos previos
- Tener instalado Node.js, Yarn o npm
- Conocimientos básicos de JavaScript o TypeScript
- Tener ganas de crear algo útil y realista
🧩 Paso a paso
Paso 1: Inicializar el proyecto
mkdir vacaciones-api
cd vacaciones-api
yarn init -y
yarn add express
yarn add -D typescript ts-node nodemon @types/node @types/express
yarn tsc --init
Agregá esto a package.json
:
"scripts": {
"dev": "nodemon src/index.ts",
"build": "tsc",
"start": "node dist/index.js"
}
Paso 2: Estructura básica del proyecto
vacaciones-api/
├── src/
│ ├── index.ts
│ ├── routes/
│ │ └── vacationRoutes.ts
│ └── controllers/
│ └── vacationController.ts
├── tsconfig.json
Paso 3: Crear un servidor Express
src/index.ts
import express from "express";
import { vacationRouter } from "./routes/vacationRoutes";
const app = express();
app.use(express.json());
app.use("/vacaciones", vacationRouter);
app.listen(3000, () => {
console.log("Servidor corriendo en http://localhost:3000");
});
Paso 4: Definir endpoints del CRUD
📌 GET /vacaciones
- Descripción: Lista todas las solicitudes
- Método: GET
📌 GET /vacaciones/:id
- Descripción: Obtiene una solicitud específica
- Método: GET
📌 POST /vacaciones
- Descripción: Crea una nueva solicitud
- Método: POST
- Body:
{
"empleado": "Luciano Soto",
"fechaInicio": "2025-12-10",
"fechaFin": "2025-12-20",
"motivo": "Vacaciones anuales"
}
📌 PUT /vacaciones/:id
- Descripción: Actualiza una solicitud existente
- Método: PUT
📌 DELETE /vacaciones/:id
- Descripción: Elimina una solicitud
- Método: DELETE
Paso 5: Crear el controlador
src/controllers/vacationController.ts
import { Request, Response } from "express";
let vacaciones: any[] = [];
let nextId = 1;
export const getVacaciones = (req: Request, res: Response) => {
res.json(vacaciones);
};
export const getVacacion = (req: Request, res: Response) => {
const id = Number(req.params.id);
const vacacion = vacaciones.find(v => v.id === id);
vacacion ? res.json(vacacion) : res.status(404).send("No encontrada");
};
export const crearVacacion = (req: Request, res: Response) => {
const nueva = { id: nextId++, ...req.body };
vacaciones.push(nueva);
res.status(201).json(nueva);
};
export const actualizarVacacion = (req: Request, res: Response) => {
const id = Number(req.params.id);
const index = vacaciones.findIndex(v => v.id === id);
if (index === -1) return res.status(404).send("No encontrada");
vacaciones[index] = { id, ...req.body };
res.json(vacaciones[index]);
};
export const eliminarVacacion = (req: Request, res: Response) => {
const id = Number(req.params.id);
vacaciones = vacaciones.filter(v => v.id !== id);
res.status(204).send();
};
Paso 6: Crear las rutas
src/routes/vacationRoutes.ts
import { Router } from "express";
import {
getVacaciones,
getVacacion,
crearVacacion,
actualizarVacacion,
eliminarVacacion,
} from "../controllers/vacationController";
export const vacationRouter = Router();
vacationRouter.get("/", getVacaciones);
vacationRouter.get("/:id", getVacacion);
vacationRouter.post("/", crearVacacion);
vacationRouter.put("/:id", actualizarVacacion);
vacationRouter.delete("/:id", eliminarVacacion);
Paso 7: Ejecutar el proyecto
yarn dev
Abrí Postman o Thunder Client y comenzá a probar tus endpoints.
🎉 Resultado final
Tendrás una API REST funcional y organizada que te permite gestionar solicitudes de vacaciones de forma sencilla. Ideal para integrarla luego con bases de datos como MongoDB, PostgreSQL o una interfaz en React.
Curso de Backend con Node.js: API REST con Express.js