Node.js

Construyendo APIs RESTful con Node.js y Express

5 de marzo de 20243 min de lecturaArtículo

Guía completa para crear APIs robustas y escalables usando Node.js y Express.

Construyendo APIs RESTful con Node.js y Express


Las APIs RESTful son la columna vertebral de las aplicaciones web modernas. En este artículo, aprenderás a construir APIs profesionales con Node.js y Express.


¿Qué es una API RESTful?


REST (Representational State Transfer) es un estilo arquitectónico para diseñar servicios web. Una API RESTful sigue estos principios:


  • Stateless: Cada petición contiene toda la información necesaria
  • Client-Server: Separación clara entre cliente y servidor
  • Cacheable: Las respuestas deben indicar si son cacheables
  • Uniform Interface: Interfaz consistente para todos los recursos

  • Configuración inicial


    import express from 'express';

    import cors from 'cors';

    import helmet from 'helmet';


    const app = express();


    // Middlewares

    app.use(cors());

    app.use(helmet());

    app.use(express.json());


    // Puerto

    const PORT = process.env.PORT || 4000;


    app.listen(PORT, () => {

    console.log(Servidor corriendo en puerto ${PORT});

    });


    Estructura de carpetas recomendada


    src/

    ├── controllers/ # Lógica de negocio

    ├── routes/ # Definición de rutas

    ├── middleware/ # Middlewares personalizados

    ├── models/ # Modelos de datos

    ├── services/ # Servicios externos

    ├── utils/ # Utilidades

    └── index.ts # Punto de entrada


    Creando un CRUD completo


    Modelo de datos


    interface Proyecto {

    id: number;

    titulo: string;

    descripcion: string;

    tecnologias: string[];

    createdAt: Date;

    }


    Controller


    // GET /api/proyectos

    export const getProyectos = async (req, res) => {

    try {

    const proyectos = await ProyectoService.findAll();

    res.json({ success: true, data: proyectos });

    } catch (error) {

    res.status(500).json({ success: false, error: error.message });

    }

    };


    // POST /api/proyectos

    export const createProyecto = async (req, res) => {

    try {

    const proyecto = await ProyectoService.create(req.body);

    res.status(201).json({ success: true, data: proyecto });

    } catch (error) {

    res.status(400).json({ success: false, error: error.message });

    }

    };


    Manejo de errores


    Un buen manejo de errores es crucial:


    // Middleware de errores

    const errorHandler = (err, req, res, next) => {

    console.error(err.stack);


    res.status(err.status || 500).json({

    success: false,

    error: err.message || 'Error interno del servidor'

    });

    };


    Validación de datos


    Usa bibliotecas como Zod o Joi para validar las entradas:


    import { z } from 'zod';


    const proyectoSchema = z.object({

    titulo: z.string().min(3).max(100),

    descripcion: z.string().min(10),

    tecnologias: z.array(z.string())

    });


    Seguridad


    Consideraciones de seguridad importantes:


  • Rate limiting: Prevenir ataques de fuerza bruta
  • Helmet: Headers de seguridad
  • Validación: Sanitizar todas las entradas
  • HTTPS: Siempre en producción
  • Variables de entorno: Nunca hardcodear secretos

  • Conclusión


    Construir APIs RESTful profesionales requiere atención al detalle en estructura, validación, manejo de errores y seguridad. Con estas bases, estarás listo para crear backends robustos y escalables.