Geralmente, os serviços chamam outros serviços quando precisam acessar seus dados. Cada parte dos dados deve pertencer a um serviço específico, que será o único ponto de entrada para acessar e modificá-los. Alguns serviços serão simples e geralmente correspondem ao modelo do seu domínio (por exemplo, um serviço para manipular usuários), enquanto outros serão de alto nível e usarão dados de outros serviços (por exemplo, exibindo uma lista de fotos juntamente com informações sobre os usuários que os carregaram) )
No seu caso de uso, você deve começar de fora e pensar em quais operações deseja disponibilizar para o usuário por meio de uma API (se for um serviço de back-end) ou quais operações devem estar disponíveis na GUI, se for um aplicativo da web. Observe que a parte da GUI geralmente é um aplicativo comum com seus próprios controladores: as operações podem ser chamadas via REST (como no AngularJS), mas esses pontos de extremidade são projetados apenas para uso do aplicativo da GUI e não são microsserviços no senso comum.
Suponha que você queira exibir fotos juntamente com informações sobre os uploaders. Você pode ter um serviço de usuário que retorna informações sobre um usuário, com o ID do usuário e um serviço de fotos que pode listar fotos (por exemplo, pesquisando por alguns critérios). A lista de fotos conteria para cada foto o ID do usuário que fez o upload. Dessa forma, esses dois serviços não são acoplados - o serviço de fotos conhece apenas os IDs do usuário, mas nada sobre os dados do usuário. Além desses dois serviços, você pode criar um terceiro serviço com uma operação como "listar fotos com informações sobre carregadores" que chamaria os outros dois serviços e combinaria os dados que eles retornam. Como alternativa, essa operação pode ser executada pelo aplicativo da Web em vez de por um serviço.