¿Debería el cliente llamarlos directamente uno tras otro para obtener los datos que necesita para cargar una página web en el cliente?
Depende; sin embargo, sugeriría proporcionar capacidades directamente utilizables al cliente y ocultar (encapsular) los detalles de cómo se ensamblan los resultados (por ejemplo, a través de múltiples microservicios).
Si el cliente involucra demasiada lógica en la combinación de resultados de microservicios individuales, eso puede causar inadvertidamente que cierta lógica comercial se infiltre en el cliente. También puede exponer más de su arquitectura interna al cliente de lo que desea, lo que dificulta la refactorización posterior de los microservicios.
Entonces, eso significa que con los microservicios, a veces es útil tener un microservicio envoltorio que proporcione al cliente un punto final que tenga abstracciones útiles y que realice una coordinación de nivel superior de otros microservicios (quizás ahora más internos).
(Además, los viajes de ida y vuelta al cliente son probablemente más caros que los de sus microservicios entre sí).
Si observa la dirección que está tomando GraphQL, por ejemplo, encontrará clientes que emiten consultas directamente relevantes a un punto final, que puede o no implementarse como una colección de microservicios. Como la arquitectura de los microservicios está oculta detrás de GraphQL, eso hace que la arquitectura sea más fácil de refactorizar y también más amigable para el cliente. Ver, por ejemplo, https://stackoverflow.com/a/38079681/471129 .