Speriamo che questo argomento non sia supponente e potrei forse ottenere una risposta significativa per favore. Il nostro problema è, immagina di avere due microservizi: Car
e Driver
. DTO del driver potrebbe essere come dire:
DriverDTO
{
id: 1,
name: "John Smith"
}
e CarDTO:
CarDTO
{
name: "Ford",
driver: {
id: 1,
name: "John Smith"
}
}
Questo modello implica la composizione di microservizi che potrebbe non essere un modo molto carino per mantenere un accoppiamento lento tra i servizi - se si aggiorna DriverDTO (nessuna modifica sostanziale, basta aggiungere un campo), è necessario aggiornare tutti i microservizi che lo consumano se ne ho bisogno, perché il frontend si aspetta da "driver":
solo l'intero modello fornito nel servizio Driver
.
Se lo facciamo come segue:
CarDTO
{
name: "Ford",
driverId: 1
}
Quindi dobbiamo fare una richiesta aggiuntiva dal frontend. Questo potrebbe essere risolto dal compositore di servizi però.
Dobbiamo decidere tra due scelte:
1) Stiamo pensando alla composizione del servizio nel gateway API, quindi fondamentalmente frontend -> API gateway (Spring Zuul) -> (2 calls, to car AND driver service)
e creerà un bel risultato composto come si vede nel secondo blocco di codice sopra.
2) Dobbiamo attenerci all'approccio: il Car
service (e anche altri servizi) lo stanno consumando e hanno bisogno di aggiungere un nuovo campo se ne hanno VERAMENTE bisogno. Quindi il campo driver:
non ha lo stesso formato su tutti i microservizi.
Che ne pensi?