Serialización y Transformación de Datos en APIs con ClassTransformer
Clase 31 de 36 • Curso de NestJS: Persistencia de Datos con TypeORM
Contenido del curso
- 3
Instalación de Docker en Windows, macOS y Ubuntu
01:35 - 4

Configuración de Postgres en Docker Compose
09:18 - 5

Conexión a Postgres en Docker: Terminal y PgAdmin
15:16 - 6

Conexión de NestJS a Postgres con Node Postgres
07:28 - 7

Inyección de Dependencias en NETJS: Conexión a PostgreSQL
10:49 - 8

Conexión a Bases de Datos con Variables de Entorno en Node.js
13:49
- 9

Implementación de TypeORM con NestJS en Proyectos Node.js
09:14 - 10

Creación de Entidades en ORM para Tiendas Virtuales
07:46 - 11

Implementación del Patrón Repository en NestJS con TypeORM
13:31 - 12

Operaciones CRUD en ProductService usando TypeORM y Postgres
13:35 - 13

Cambio de Postgres a MySQL en Docker para CRUD de Productos
17:28
- 18

Relaciones 1 a 1 en Bases de Datos con TimeORM
18:58 - 19

Manipulación de Relaciones Uno a Uno en Controladores y Servicios
10:28 - 20

Relaciones Uno a Muchos en Bases de Datos con TypeORM
10:36 - 21

Gestión de Relaciones Uno a Muchos en Controladores de API
10:27 - 22

Relaciones Muchos a Muchos en Time1M: Creación y Manejo Práctico
08:38 - 23

Manipulación de Relaciones Muchos a Muchos en Controladores
15:08 - 24

Manipulación de Relaciones Muchos a Muchos con TimeORM en JavaScript
19:09 - 25

Relaciones Muchos a Muchos con Campos Agregados en TimeWareM
16:41 - 26

CRUD de órdenes de compra y gestión de ítems en NestJS
30:07
- 27

Paginación de Productos con Limit y Offset en Controladores API
10:37 - 28

Filtrado de Precios con Rango Usando Between en Time Wareham
10:17 - 29

Indexación de Parámetros en Bases de Datos: Uso y Precauciones
02:56 - 30

Buenas prácticas de nombramiento en JavaScript y bases de datos
17:52 - 31

Serialización y Transformación de Datos en APIs con ClassTransformer
16:55
¿Qué es la serialización y cómo se aplica en las APIs?
La serialización se refiere a la técnica de transformar datos antes de que un controlador los envíe al servicio o a una respuesta. Esta técnica es ampliamente utilizada en las APIs, ya sean REST o GraphQL, permitiendo la manipulación de los datos para excluir o agregar información según la necesidad.
¿Cómo activar la serialización en un proyecto?
Para usar la técnica de serialización, primero debes modificar el archivo main.typescript. Desde la librería @nestjs/common, junto con ValidationPipe, debes incluir un interceptor llamado ClassSerializerInterceptor. Posteriormente, configura la aplicación para que utilice este interceptor de manera global:
app.useGlobalInterceptors(
new ClassSerializerInterceptor(app.get(Reflector))
);
Este paso inicial configura el proyecto para que pueda aplicar serialización en cualquier parte de la aplicación.
¿Cómo excluir información sensible?
La exclusión de datos es crucial, especialmente para información sensible como contraseñas. Usando ClassTransformer, puedes excluir campos como CREATED_AT e UPDATED_AT de las respuestas. A continuación, un ejemplo de cómo hacerlo en una entidad:
import { Exclude } from 'class-transformer';
class OrderItemEntity {
@Exclude()
createdAt: Date;
@Exclude()
updatedAt: Date;
}
Cuando el serializador está activo, estos campos se eliminan automáticamente de la respuesta, protegiendo así la información.
¿Cómo transformar o agregar nueva información?
Además de excluir datos, la serialización permite transformar los datos existentes o agregar nuevos campos con la ayuda del decorador @Expose. Por ejemplo, si necesitas un array de productos más limpio, como en el caso de una orden, puedes usar @Expose para crear un campo que procese y retorne la estructura deseada.
Ejemplo de transformación
import { Expose } from 'class-transformer';
class OrderEntity {
private items: OrderItemEntity[];
@Expose()
get products() {
return this.items?.filter(item => !!item)
.map(item => ({
...item.product,
quantity: item.quantity,
})) || [];
}
}
Este bloque de código asegura que sólo los datos necesarios, como los productos y su cantidad, se expongan de manera organizada.
Consideraciones al calcular campos dinámicamente
La técnica de serialización permite calcular campos dinámicamente. Sin embargo, es importante tener en cuenta el impacto en el rendimiento, especialmente cuando se trata de grandes volúmenes de datos. El cálculo de un total, por ejemplo, puede realizarse dentro de Node.js, pero para datos masivos es preferible delegar esos cálculos a una base de datos para evitar problemas de rendimiento.
Cálculo de un total de orden
Aquí un ejemplo de cómo implementar un cálculo de campo dinámico dentro de una entidad:
@Expose()
get total() {
return this.items?.filter(item => !!item)
.reduce((total, item) => total + item.product.price * item.quantity, 0) || 0;
}
Esta implementación depende de buenos hábitos de codificación y de optimización constante para asegurar que la API funcione de manera eficiente sin sobrecargar el servidor.
La serialización es una técnica poderosa cuando se aplica correctamente, asegurando que sólo la información relevante salga a la luz mientras mantiene la integridad y seguridad de los datos sensibles. ¡Practica implementando serialización en tus proyectos para profesionalizar la manipulación de datos en tus APIs!