Actualmente estoy creando una REST-API para un proyecto y he estado leyendo artículo tras artículo sobre las mejores prácticas. Muchos parecen estar en contra de los DTO y simplemente exponen el modelo de dominio, mientras que otros parecen pensar que los DTO (o modelos de usuario o como quieran llamarlo) son una mala práctica. Personalmente, pensé que este artículo tenía mucho sentido.
Sin embargo, también entiendo los inconvenientes de los DTO con todo el código de mapeo adicional, los modelos de dominio que podrían ser 100% idénticos a su contraparte DTO, etc.
Nuestra API se crea principalmente para que otros clientes puedan consumir datos, sin embargo, si lo hacemos bien, también nos gustaría usarlo para nuestra propia GUI web si es posible.
La cuestión es que es posible que no queramos exponer todos los datos del dominio a los otros usuarios del cliente. Gran parte de los datos solo tendrán sentido en nuestra propia aplicación web. Además, es posible que no queramos exponer todos los datos sobre un objeto en todos los escenarios, especialmente las relaciones con otros objetos, etc. Por ejemplo, si exponemos una lista de un objeto en particular, no necesariamente queremos exponer toda la jerarquía de objetos; para que los hijos del objeto no estén expuestos, sino que se puedan descubrir a través de enlaces (hateoas).
¿Cómo debo resolver este problema? Estaba pensando en usar Jackson mixins en nuestros modelos de dominio para controlar qué datos estarían expuestos en diferentes escenarios. ¿O deberíamos usar DTO todo el tiempo, incluso teniendo en cuenta sus inconvenientes y controversia?