Ola @MestriRodrigo, separei sua pergunta em topicos para facilitar.
Como se comunicam?
Em uma arquitetura distribuida (micro-servicos) as aplicacoes podem se comunicar internamente de duas maneiras, sincrona ou assincrona. Sincrona: Comunicacao sincrona exige que as duas aplicacoes estejam rodando ao mesmo tempo e capaz de responder uma solicitacao quase instantaneamente. Normalmente utiliza protocolos como o HTTP. A parte ruim desse metodo e que se por algum motivo uma das aplicacoes estiver indisponivel no momento, o sistema como um todo para de funcionar. Assincrona: Nesse metodo, a estrutura do sistema fica mais complexa e normalmente exige um intermediario entre os dois sistemas para se comunicar. Existe varias ferramentas para suportar esse tipo de estrutura, normalmente chamadas de message brokers, pelo meu conhecimento, uma das mais conhecidas e o kafka. A parte ruim de comunicacoes assincronas e que a complexidade do sistema aumenta, dificultando rastreamento de errors e aumentando tempo de desenvolvimento. [Opiniao] Projetos para utilizacao de micro-servicos:
- Intuito de aprendizado. (Sistemas/Empresas que lidam com grande trafico de dados em sua maioria adotam micro-servicos pela sua resiliencia e maior controle de escalonamento. Aprender essa arquitetura pode te dar vantagens em caso de uma entrevista.)
- Projeto que ja tem ou preve ter em curto-prazo grande trafego de informacoes. Como disse anteriormente, as vantagens de resiliencia a escalonamento sao fundamentais para manter as coisas funcionando.
Caso nao seja uma das opcoes acima, aconselho manter em monolitos pela praticidade e velocidade de desenvolvimento.
Como garantem que a requisicao vem do servico que a requisitou?
Normalmente os micro servicos estao rodando na mesma rede/cluster e como a comunicacao ocorre internamente, voce nao precisa autenticar de quem veio a requisicao. O servico recebe a requisicao e responde sem checar a origem. Lembrando que essas portas de entradas nao podem ser acessiveis publicamente.
Como validar os dados?
Cada servico e responsavel de validar os dados de entrada e caso a requisicao esteja em um formato invalido, deve responder com um error (por exemplo erro status 400) como se fosse um usuario normal.
As respostas sao validas para comunicacoes internas apenas, no caso de comunicacao com clientes (por exemplo navegador de usuario), as regras de seguranca e validacao de dados sao outras. Seria melhor discutir sobre isso em outra thread.
Espero ter ajudado e tambem espero que alguem tenha algo para debater ou complementar.