Attualmente sto creando un'API REST per un progetto e sto leggendo articolo su articolo sulle migliori pratiche. Molti sembrano essere contrari ai DTO e semplicemente espongono il modello di dominio, mentre altri sembrano pensare che i DTO (o modelli utente o come si desidera chiamarlo) siano cattive pratiche. Personalmente, ho pensato che questo articolo avesse molto senso.
Tuttavia, capisco anche gli svantaggi dei DTO con tutto il codice di mappatura aggiuntivo, modelli di dominio che potrebbero essere identici al 100% alla loro controparte DTO e così via.
La nostra API è principalmente creata in modo tale che altri clienti possano consumare dati, tuttavia se lo facciamo nel modo giusto vorremmo anche usarli per la nostra GUI Web se possibile.
Il fatto è che potremmo non voler esporre tutti i dati del dominio agli altri utenti client. Gran parte dei dati avrà senso solo nella nostra applicazione web. Inoltre, potremmo non voler esporre tutti i dati su un oggetto in tutti gli scenari, in particolare le relazioni con altri oggetti e così via. Ad esempio, se esponiamo un elenco di un oggetto particolare, non vorremmo necessariamente esporre l'intera gerarchia degli oggetti; in modo che i figli dell'oggetto non vengano esposti, ma possano essere scoperti attraverso collegamenti (hateoas).
Come devo fare per risolvere questo problema? Stavo pensando di utilizzare i mixin Jackson sui nostri modelli di dominio per controllare quali dati sarebbero stati esposti in diversi scenari. O dovremmo semplicemente usare i DTO fino in fondo - anche visti i suoi svantaggi e polemiche?