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 -yA continuación, instale las dependencias necesarias para Express y TypeScript.
npm install express
npm install --save-dev typescript ts-node @types/node @types/expressCree un archivo tsconfig.json para configurar TypeScript. Ejecute el siguiente comando:
npx tsc --initModifique 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.tsDefinició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.