Creación de una API REST con TypeScript y Express

TypeScript y Express son una combinación potente para crear API REST sólidas. TypeScript ofrece seguridad de tipos, mejores herramientas y una experiencia de desarrollo mejorada, mientras que Express es un marco web minimalista para Node.js. Esta guía le mostrará los pasos para crear una API REST utilizando TypeScript y Express.

Configuración del proyecto

Comience creando un nuevo directorio para el proyecto e inicializando una aplicación Node.js.

mkdir typescript-express-api
cd typescript-express-api
npm init -y

A continuación, instale las dependencias necesarias para Express y TypeScript.

npm install express
npm install --save-dev typescript ts-node @types/node @types/express

Cree un archivo tsconfig.json para configurar TypeScript. Ejecute el siguiente comando:

npx tsc --init

Modifique el archivo tsconfig.json para adaptarlo a las necesidades del proyecto, habilitando opciones como "strict", "esModuleInterop" y configurando el directorio de salida en "dist".

Creando el servidor Express

Cree una nueva carpeta llamada src y dentro de ella cree un archivo llamado index.ts. Este archivo servirá como punto de entrada para el servidor Express.

import express, { Request, Response } from 'express';

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

app.use(express.json());

app.get('/', (req: Request, res: Response) => {
  res.send('Hello, TypeScript and Express!');
});

app.listen(PORT, () => {
  console.log(`Server is running on http://localhost:${PORT}`);
});

Para ejecutar el servidor, utilice el siguiente comando:

npx ts-node src/index.ts

Definición de rutas API

Cree una nueva carpeta dentro de src denominada routes. En esta carpeta, cree un archivo denominado userRoutes.ts para definir rutas destinadas a gestionar solicitudes relacionadas con el usuario.

import { Router, Request, Response } from 'express';

const router = Router();

router.get('/users', (req: Request, res: Response) => {
  res.json({ message: 'Get all users' });
});

router.post('/users', (req: Request, res: Response) => {
  const user = req.body;
  res.json({ message: 'User created', user });
});

export default router;

En el archivo index.ts, importe las userRoutes y utilícelas en la aplicación.

import userRoutes from './routes/userRoutes';

app.use('/api', userRoutes);

Creación de una capa de controlador y de servicio

Organice el código creando capas separadas para controladores y servicios. Cree dos carpetas nuevas dentro de src: controllers y services.

En la carpeta controllers, cree un archivo llamado userController.ts.

import { Request, Response } from 'express';
import { getAllUsers, createUser } from '../services/userService';

export const getUsers = (req: Request, res: Response) => {
  const users = getAllUsers();
  res.json(users);
};

export const addUser = (req: Request, res: Response) => {
  const newUser = req.body;
  const user = createUser(newUser);
  res.json(user);
};

En la carpeta services, cree un archivo llamado userService.ts.

interface User {
  id: number;
  name: string;
}

let users: User[] = [];

export const getAllUsers = (): User[] => {
  return users;
};

export const createUser = (user: User): User => {
  users.push(user);
  return user;
};

Actualice userRoutes.ts para usar estos controladores:

import { Router } from 'express';
import { getUsers, addUser } from '../controllers/userController';

const router = Router();

router.get('/users', getUsers);
router.post('/users', addUser);

export default router;

Probando la API REST

Para probar la API REST, use una herramienta como Postman o curl para enviar solicitudes a los puntos finales. Inicie el servidor y realice una solicitud GET a /api/users y una solicitud POST a /api/users con una carga útil JSON.

Conclusión

Siguiendo estos pasos, se puede crear una API REST con TypeScript y Express. TypeScript agrega seguridad de tipos y una mejor experiencia de desarrollo, mientras que Express proporciona un marco simple y poderoso para crear servicios RESTful. Esta configuración se puede mejorar aún más agregando validación, manejo de errores y una lógica comercial más compleja.