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.