38. Pipes
Pipes en NestJS: Transformación y Validación de Datos en Requests
En el desarrollo de APIs con NestJS, es crucial asegurar que los datos recibidos en las requests cumplan con las expectativas de tipo, formato o estructura. Para esto, NestJS ofrece una herramienta poderosa: los Pipes.
¿Qué son los Pipes?
Los Pipes son clases diseñadas para:
Transformar datos (ejemplo: convertir un
stringanumber).Validar datos (asegurar que cumplan ciertas condiciones).
Se ejecutan antes de que la request llegue al manejador de la ruta (controller), garantizando que la data sea correcta.
Pipes Integrados en NestJS
NestJS incluye varios Pipes listos para usar:
ValidationPipe: Valida objetos basados en reglas definidas (usandoclass-validator).ParseIntPipe: Convierte un parámetro de tipostringanumber(entero).ParseFloatPipe: Similar al anterior, pero para números decimales.ParseBoolPipe: Transforma un valor a booleano ('true'→true).ParseArrayPipe: Convierte un parámetro en un arreglo.ParseUUIDPipe: Valida que un parámetro sea un UUID válido.
Ejemplo Práctico: Validación de un ID numérico
Imagina un endpoint que busca un auto por su id. Sin validación, un id malformado (ej: '3a') podría causar errores. Usando ParseIntPipe, NestJS se encarga de la transformación y validación automáticamente.
Código del Controlador
import { Controller, Get, Param, ParseIntPipe } from '@nestjs/common';
import { CarsService } from './cars.service';
@Controller('cars')
export class CarsController {
constructor(private readonly carsService: CarsService) {}
@Get(':id')
getCarById(@Param('id', ParseIntPipe) id: number) {
return this.carsService.findOneById(id);
} @Post()
createCar(@Body() body: any) {
return body;
}
@Patch(':id')
updateCar(
@Param('id', ParseIntPipe) id: number,
@Body() body: any
) {
return body;
}
@Delete(':id')
deleteCar(@Param('id', ParseIntPipe) id: number) {
return {
method: 'delete',
id
};
}
}Código del Servicio
import { Injectable } from '@nestjs/common';
@Injectable()
export class CarsService {
private cars = [
{ id: 1, brand: 'Toyota', model: 'Corolla' },
{ id: 2, brand: 'Honda', model: 'Civic' },
{ id: 3, brand: 'Jeep', model: 'Cherokee' },
];
findOneById(id: number) {
return this.cars.find(car => car.id === id);
}
}¿Qué pasa si el ID no es válido?
Si un cliente hace una request con un id no numérico (ej: /cars/3a), NestJS automáticamente devuelve un error HTTP 400 (Bad Request):
{
"statusCode": 400,
"message": "Validation failed (numeric string is expected)",
"error": "Bad Request"
}Esto evita que tengas que escribir validaciones manuales y centraliza el manejo de errores.
Ventajas de Usar Pipes
Código más limpio: Elimina validaciones redundantes en los controladores.
Seguridad: Previene inyección de datos malformados.
Mantenibilidad: Las reglas de transformación/validación se definen en un solo lugar.
Conclusión
Los Pipes son una pieza fundamental en NestJS para garantizar la integridad de los datos. Con herramientas como ParseIntPipe, puedes evitar errores comunes y asegurar que tu API sea robusta desde el primer momento.
¿Quieres profundizar? Te recomiendo explorar ValidationPipe para validar objetos complejos con decoradores como @IsEmail() o @IsString().
Explicación de los Status Codes HTTP
Los códigos de estado HTTP indican el resultado de una solicitud al servidor. Se clasifican en 5 grupos:
Respuestas informativas (100-199):
Indican que la request fue recibida y el proceso continúa.
Ejemplo:102 Processing(la petición está en proceso).Respuestas exitosas (200-299):
Confirman que la acción solicitada fue completada.
Ejemplos:200 OK(éxito estándar).201 Created(recurso creado).204 No Content(éxito pero sin respuesta).
Redirecciones (300-399):
Indican que el cliente debe tomar otra acción para completar la request.
Ejemplos:301 Moved Permanently(recurso movido permanentemente).304 Not Modified(el recurso no ha cambiado desde la última consulta).
Errores del cliente (400-499):
Indican problemas con la solicitud del cliente.
Ejemplos:400 Bad Request(datos malformados, como en nuestroParseIntPipe).401 Unauthorized(falta autenticación).404 Not Found(recurso no existe).
Errores del servidor (500-599):
Indican fallos en el servidor al procesar la solicitud.
Ejemplos:500 Internal Server Error(error genérico del servidor).503 Service Unavailable(servicio no disponible temporalmente).
Ventajas de Usar Pipes
Código más limpio: Elimina validaciones redundantes en los controladores.
Seguridad: Previene inyección de datos malformados.
Mantenibilidad: Las reglas de transformación/validación se definen en un solo lugar.
Conclusión
Los Pipes son una pieza fundamental en NestJS para garantizar la integridad de los datos. Con herramientas como ParseIntPipe, puedes evitar errores comunes y asegurar que tu API sea robusta desde el primer momento.
¿Te gustó el contenido? Déjame tus comentarios y comparte cómo usas los Pipes en tus proyectos. ¡Hasta la próxima! 🚀
¿Te gustó el contenido? Déjame tus comentarios y comparte cómo usas los Pipes en tus proyectos. ¡Hasta la próxima!
Comentarios
Publicar un comentario