O cliente deve chamá-los diretamente um após o outro para obter os dados necessários para carregar uma página da Web no cliente?
Depende; no entanto, sugiro fornecer recursos diretamente utilizáveis ao cliente e ocultar (encapsular) os detalhes de como os resultados são reunidos (por exemplo, através de vários micro serviços).
Se houver muita lógica envolvida na combinação de resultados individuais de microsserviços pelo cliente, isso pode causar inadvertidamente alguma lógica de negócios que se infiltra no cliente. Também pode expor mais da sua arquitetura interna ao cliente do que você gostaria, dificultando a refatoração posterior dos microsserviços.
Portanto, com microsserviços, às vezes é útil ter um microsserviço de wrapper que forneça ao cliente um terminal com abstrações úteis e que execute uma coordenação de nível mais alto de outros microsserviços (talvez agora mais internos).
(Além disso, as viagens de ida e volta para o cliente provavelmente são mais caras do que dos microsserviços entre si.)
Se você observar a direção adotada pelo GraphQL, por exemplo, encontrará clientes emitindo consultas diretamente relevantes para um terminal, que pode ou não ser implementado como uma coleção de microsserviços. Como a arquitetura dos microsserviços fica oculta por trás do GraphQL, isso torna a arquitetura mais fácil de refatorar e também mais amigável para o cliente. Consulte, por exemplo, https://stackoverflow.com/a/38079681/471129 .