LogoLupe

API RESTful

Descripción del proyecto

Una API RESTful robusta y escalable construida con Node.js y TypeScript. Incluye autenticación, documentación automática, validación de datos y todas las mejores prácticas para el desarrollo de APIs modernas.

Características principales

  • Autenticación JWT
  • Documentación Swagger
  • Validación de datos
  • Rate limiting
  • Caché de respuestas
  • Logging y monitoreo
  • Tests automatizados
  • Docker ready

Stack tecnológico

Backend

  • Node.js y Express
  • TypeScript
  • MongoDB y Mongoose
  • Jest para testing

Seguridad

  • JWT Authentication
  • Helmet.js
  • CORS configurado
  • Rate limiting

Documentación

  • Swagger/OpenAPI
  • Postman Collection
  • README detallado
  • Guías de deployment

Ejemplos de código

Controlador de Usuario

// controllers/user.controller.ts
import { Request, Response } from 'express';
import { User } from '../models/user.model';
import { createUserSchema } from '../validators/user.validator';

export class UserController {
  async createUser(req: Request, res: Response) {
    try {
      // Validar input
      const { error, value } = createUserSchema.validate(req.body);
      if (error) {
        return res.status(400).json({
          status: 'error',
          message: error.details[0].message
        });
      }

      // Verificar si el usuario existe
      const existingUser = await User.findOne({ email: value.email });
      if (existingUser) {
        return res.status(409).json({
          status: 'error',
          message: 'User already exists'
        });
      }

      // Crear nuevo usuario
      const user = new User(value);
      await user.save();

      // Generar token
      const token = user.generateAuthToken();

      res.status(201).json({
        status: 'success',
        data: {
          user: user.toJSON(),
          token
        }
      });
    } catch (error) {
      res.status(500).json({
        status: 'error',
        message: 'Internal server error'
      });
    }
  }
}

Middleware de Autenticación

// middleware/auth.middleware.ts
import { Request, Response, NextFunction } from 'express';
import jwt from 'jsonwebtoken';
import { User } from '../models/user.model';

export const auth = async (
  req: Request,
  res: Response,
  next: NextFunction
) => {
  try {
    const token = req.header('Authorization')?.replace('Bearer ', '');
    
    if (!token) {
      throw new Error();
    }

    const decoded = jwt.verify(token, process.env.JWT_SECRET!);
    const user = await User.findOne({
      _id: decoded._id,
      'tokens.token': token
    });

    if (!user) {
      throw new Error();
    }

    req.token = token;
    req.user = user;
    next();
  } catch (error) {
    res.status(401).json({
      status: 'error',
      message: 'Please authenticate'
    });
  }
}

Recursos adicionales

Explora la documentación y el código: