¿Por qué usar DTOs en lugar de exponer directamente las entidades JPA en tu API?
Opciones
- Los DTOs siempre compilan más rápido que las entidades
- Para controlar lo que expone la API y mantenerla estable (Opción correcta)
- Las entidades no se pueden serializar a JSON de ninguna forma
- 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.