Repaso
English
Spring, JPA y Java WebIntermedioSPR-23

¿Por qué usar DTOs en lugar de exponer directamente las entidades JPA en tu API?

Opciones

  1. Los DTOs siempre compilan más rápido que las entidades
  2. Para controlar lo que expone la API y mantenerla estable (Opción correcta)
  3. Las entidades no se pueden serializar a JSON de ninguna forma
  4. Spring exige DTOs en todos los métodos de controlador

Respuesta

Para controlar exactamente qué sale y entra por la API (sin hashes de contraseñas ni campos internos), evitar sorpresas con el lazy loading y mantener la API estable cuando cambia la base de datos

Por qué

Un DTO (Data Transfer Object) es una clase simple (a menudo un record) con la forma que necesita la API.

Si devuelves una entidad: puedes filtrar campos sensibles, la serialización a JSON puede disparar lazy loading (o fallar) y cualquier cambio en la base de datos rompe el contrato de tu API.

Con DTOs, la API y la base de datos pueden evolucionar por separado. El mapeo se hace a mano o con MapStruct.

Recuerda

Entidad = forma de la base de datos. DTO = forma de la API.

Términos clave

Practica esta pregunta en Repaso