Cómo escribir una API REST en TypeScript en 30 minutos

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

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



Crear una API REST es una tarea básica para cualquier desarrollador backend. El uso de TypeScript añade tipado estricto, mejora la legibilidad del código y reduce la cantidad de errores. En este artículo, analizaremos cómo escribir una API REST completa en TypeScript desde cero en solo 30 minutos. Conocerás Express, TypeORM y las mejores prácticas de organización del código.



1. Configuración del proyecto e instalación de dependencias



Primero, crea un nuevo directorio e inicializa el proyecto Node.js:



mkdir my-rest-apicd my-rest-apinpm init -y


Instala los paquetes necesarios:



npm install express reflect-metadata typeorm sqlite3npm install -D typescript @types/node @types/express ts-node nodemon


Crea el archivo tsconfig.json para la configuración de TypeScript:



{  "compilerOptions": {    "target": "ES2020",    "module": "commonjs",    "outDir": "./dist",    "rootDir": "./src",    "strict": true,    "esModuleInterop": true,    "experimentalDecorators": true,    "emitDecoratorMetadata": true,    "skipLibCheck": true  },  "include": ["src/**/*"]}


2. Creación de la estructura base y punto de entrada



Organiza la estructura de carpetas de la siguiente manera:



  • src/ — código principal
  • src/controllers/ — controladores
  • src/entities/ — entidades de base de datos
  • src/routes/ — rutas


Crea el archivo src/index.ts — punto de entrada de la aplicación:



import "reflect-metadata";import express from "express";import { AppDataSource } from "./data-source";import { userRoutes } from "./routes/userRoutes";

const app = express();const PORT = process.env.PORT || 3000;

app.use(express.json());

AppDataSource.initialize() .then(() => { console.log("Database connected"); app.use("/api/users", userRoutes); app.listen(PORT, () => { console.log(`Server running on http://localhost:${PORT}`); }); }) .catch((error) => console.log(error));


Ahora crea src/data-source.ts para la configuración de TypeORM:



import { DataSource } from "typeorm";import { User } from "./entities/User";

export const AppDataSource = new DataSource({ type: "sqlite", database: "database.sqlite", synchronize: true, logging: false, entities: [User],});


3. Definición de la entidad y el controlador



Crea el archivo src/entities/User.ts — modelo de usuario:



import { Entity, PrimaryGeneratedColumn, Column } from "typeorm";

@Entity()export class User { @PrimaryGeneratedColumn() id!: number;

@Column() name!: string;

@Column() email!: string;

@Column({ default: true }) isActive!: boolean;}


Ahora crearemos el controlador src/controllers/userController.ts:



import { Request, Response } from "express";import { AppDataSource } from "../data-source";import { User } from "../entities/User";

const userRepository = AppDataSource.getRepository(User);

export const getUsers = async (req: Request, res: Response) => { try { const users = await userRepository.find(); res.json(users); } catch (error) { res.status(500).json({ message: "Error fetching users" }); }};

export const getUserById = async (req: Request, res: Response) => { try { const user = await userRepository.findOneBy({ id: parseInt(req.params.id) }); if (!user) { return res.status(404).json({ message: "User not found" }); } res.json(user); } catch (error) { res.status(500).json({ message: "Error fetching user" }); }};

export const createUser = async (req: Request, res: Respo

Blogs

Book Recommendations