Certificado de Nest API REST

10h 0m

Domina la creación de API REST con Nest y TypeScript, el framework moderno para desarrolladores backend que usan JavaScript.

Empezar curso

NestJS representa una evolución natural en el desarrollo de aplicaciones Node.js, combinando la flexibilidad de JavaScript con la robustez de TypeScript y los patrones arquitectónicos más sólidos del desarrollo backend. 

Este framework ha ganado reconocimiento en la industria por su capacidad para crear APIs REST escalables y mantenibles, adoptando principios de diseño que facilitan tanto el desarrollo inicial como el crecimiento a largo plazo de las aplicaciones.

Arquitectura y filosofía de diseño

La arquitectura modular de NestJS se inspira en frameworks como Angular, implementando un sistema de decoradores que permite definir la funcionalidad de manera declarativa y clara. Esta aproximación facilita la comprensión del código y reduce significativamente la curva de aprendizaje para desarrolladores que provienen de otros ecosistemas.

El framework adopta el patrón Modelo-Vista-Controlador (MVC) de forma nativa, proporcionando una separación clara de responsabilidades que mejora la organización del código. Los controladores manejan las peticiones HTTP, los servicios contienen la lógica de negocio, y los módulos actúan como contenedores que organizan y conectan estos componentes.

@Controller('users')
export class UsersController {
  constructor(private readonly usersService: UsersService) {}

  @Get()
  findAll(): Promise<User[]> {
    return this.usersService.findAll();
  }
}

Gestión de peticiones HTTP

NestJS proporciona decoradores específicos para cada método HTTP, simplificando la definición de endpoints REST. Los métodos @Get(), @Post(), @Put() y @Delete() permiten crear APIs que siguen las convenciones REST de manera intuitiva y expresiva.

La gestión de parámetros se realiza mediante decoradores como @Param(), @Body() y @Query(), que extraen automáticamente los datos de las peticiones y los tipan correctamente cuando se utiliza TypeScript.

@Controller('products')
export class ProductsController {
  @Post()
  create(@Body() createProductDto: CreateProductDto): Promise<Product> {
    return this.productsService.create(createProductDto);
  }

  @Put(':id')
  update(
    @Param('id') id: string,
    @Body() updateProductDto: UpdateProductDto
  ): Promise<Product> {
    return this.productsService.update(id, updateProductDto);
  }
}

Validación y transformación de datos

El framework integra un sistema de validación robusto mediante pipes, que actúan como interceptores que procesan los datos antes de que lleguen a los controladores. Los pipes pueden validar, transformar y sanitizar los datos de entrada, garantizando que la aplicación reciba únicamente información válida.

La validación declarativa se implementa utilizando decoradores de class-validator, permitiendo definir reglas de validación directamente en los DTOs (Data Transfer Objects). Este enfoque centraliza las reglas de validación y las hace reutilizables en toda la aplicación.

export class CreateUserDto {
  @IsEmail()
  @IsNotEmpty()
  email: string;

  @IsString()
  @MinLength(8)
  @Matches(/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)/, {
    message: 'La contraseña debe contener al menos una mayúscula, una minúscula y un número'
  })
  password: string;

  @IsOptional()
  @IsString()
  @MaxLength(100)
  name?: string;
}

Manejo de errores y excepciones

NestJS implementa un sistema de manejo de errores centralizado que captura automáticamente las excepciones y las transforma en respuestas HTTP apropiadas. El framework proporciona excepciones predefinidas para los códigos de estado HTTP más comunes, facilitando la creación de APIs que comunican errores de manera consistente.

Los filtros de excepción personalizados permiten implementar lógica específica para el manejo de errores, incluyendo logging, notificaciones y transformación de mensajes de error según las necesidades de la aplicación.

@Injectable()
export class UsersService {
  async findOne(id: string): Promise<User> {
    const user = await this.userRepository.findById(id);
    
    if (!user) {
      throw new NotFoundException(`Usuario con ID ${id} no encontrado`);
    }
    
    return user;
  }

  async create(userData: CreateUserDto): Promise<User> {
    try {
      return await this.userRepository.create(userData);
    } catch (error) {
      if (error.code === 'DUPLICATE_EMAIL') {
        throw new ConflictException('El email ya está registrado');
      }
      throw new InternalServerErrorException('Error al crear el usuario');
    }
  }
}

Procesamiento de archivos multimedia

El framework facilita la gestión de archivos mediante interceptores especializados que manejan la carga, validación y almacenamiento de contenido multimedia. Esta funcionalidad es esencial para APIs que necesitan procesar imágenes, documentos u otros tipos de archivos.

La validación de archivos incluye verificación de tipos MIME, tamaños máximos y otras restricciones de seguridad, garantizando que la aplicación procese únicamente contenido válido y seguro.

@Controller('uploads')
export class UploadsController {
  @Post('image')
  @UseInterceptors(FileInterceptor('file', {
    fileFilter: (req, file, callback) => {
      if (!file.mimetype.match(/\/(jpg|jpeg|png|gif)$/)) {
        return callback(new BadRequestException('Solo se permiten imágenes'), false);
      }
      callback(null, true);
    },
    limits: { fileSize: 5 * 1024 * 1024 } // 5MB
  }))
  uploadImage(@UploadedFile() file: Express.Multer.File): Promise<string> {
    return this.uploadsService.saveImage(file);
  }
}

Serialización y control de respuestas

La serialización automática en NestJS permite controlar qué datos se incluyen en las respuestas HTTP, implementando patrones como la exclusión de campos sensibles o la transformación de datos según el contexto. Los interceptores de serialización actúan como una capa de presentación que adapta los datos del modelo interno al formato requerido por los clientes.

El control granular de la serialización se logra mediante decoradores que especifican qué propiedades deben incluirse o excluirse en diferentes escenarios, permitiendo crear APIs que exponen exactamente la información necesaria para cada caso de uso.

export class UserEntity {
  id: string;
  email: string;
  name: string;
  
  @Exclude()
  password: string;
  
  @Expose({ groups: ['admin'] })
  createdAt: Date;
  
  @Transform(({ value }) => value.toUpperCase())
  role: string;

  constructor(partial: Partial<UserEntity>) {
    Object.assign(this, partial);
  }
}

Herramientas de desarrollo y CLI

El NestJS CLI proporciona un conjunto completo de comandos que automatizan las tareas más comunes del desarrollo, desde la creación de nuevos proyectos hasta la generación de componentes específicos. Esta herramienta acelera significativamente el proceso de desarrollo y garantiza que el código generado siga las convenciones del framework.

Los comandos de generación crean automáticamente la estructura de archivos necesaria para controladores, servicios, módulos y otros componentes, incluyendo los archivos de prueba correspondientes. Esta automatización reduce los errores manuales y mantiene la consistencia en toda la aplicación.

# Crear un nuevo proyecto
nest new mi-api-rest

# Generar un controlador completo con servicio
nest generate resource users

# Generar componentes individuales
nest generate controller products
nest generate service products
nest generate module products

Integración con el ecosistema Node.js

NestJS se integra perfectamente con el ecosistema existente de Node.js, permitiendo utilizar cualquier biblioteca de npm sin restricciones. Esta compatibilidad garantiza que los desarrolladores puedan aprovechar las herramientas y bibliotecas que ya conocen, mientras se benefician de la estructura y organización que proporciona el framework.

La flexibilidad de configuración permite adaptar NestJS a diferentes entornos y requisitos, desde aplicaciones simples hasta sistemas distribuidos complejos. El framework soporta múltiples adaptadores de plataforma, incluyendo Express y Fastify, permitiendo optimizar el rendimiento según las necesidades específicas del proyecto.

Empezar curso

Otros cursos de programación con certificado

Supera todos los retos de Nest API REST y obtén estos certificados de superación para mejorar tu currículum y tu empleabilidad.

Tecnologías que aprenderás

Nest API REST

Al finalizar este curso obtendrás

Certificado de superación en Nest API REST

Certificado de superación en Nest API REST

Tras completar todas las lecciones y ejercicios del curso Nest API REST se te genera un enlace con tu certificado para que lo puedas descargar o compartir directamente en cualquier plataforma, siempre accesible.

Accede a todas certificaciones