Should the client call them directly one after another to get the data it needs to load up a web page on the client?
Dipende; tuttavia, suggerirei di fornire funzionalità direttamente utilizzabili al client e di nascondere (incapsulare) i dettagli di come i risultati vengono assemblati (ad esempio tramite più servizi micro).
Se troppa logica è coinvolta nel combinare i risultati dei singoli servizi di micro-cliente da parte del cliente, ciò potrebbe inavvertitamente causare l'intrusione di alcune logiche di business nel client. Può anche esporre più client dell'architettura interna al client di quanto si desideri, impedendo in seguito il refactoring dei microservizi.
Quindi, questo significa con i microservizi, a volte è utile avere un microservizio wrapper che fornisce al client un endpoint con astrazioni utili e che esegue un coordinamento di livello superiore di altri microservizi (forse ora più interni).
(Inoltre, i viaggi di andata e ritorno verso il cliente sono probabilmente più costosi che dai tuoi microservizi l'uno all'altro).
Se osservi la direzione che sta prendendo GraphQL, ad esempio, troverai i client che inviano query direttamente rilevanti a un endpoint, che può o meno essere implementato come una raccolta di micrservices. Poiché l'architettura dei microservizi è nascosta dietro GraphQL, ciò rende l'architettura più facile da ridefinire e anche più amichevole con il cliente. Vedi, ad esempio, link .