Exemplo da criação de um Pact entre:
- 1 consumidor (Consumer)
- 1 provedor (Provider)
- Veja este mesmo cenário feito em Node.
- OpenJdk 11
- Spring Boot
- Swagger
- Lombok
- Pact JVM
- Pact Broker
- Maven
Este exemplo aborda um cenário comum no setor bancário. Nosso objetivo é obter o dado de saldo de determinado cliente. Para isto, vamos considerar que este dado será recuperado da seguinte forma:
1 - Com o identificador do cliente, solicitamos ao serviço de dominio do cliente (client-api) o valor do saldo em conta.
2 - Por sua vez, o client-api pergunta ao serviço de domínio da conta (account-api) qual o saldo contido na conta atrelada aquele cliente.
3 - Tendo a informação do saldo em conta, o client-api retorna a informação a quem a solicitou.
A imagem abaixo representa esse fluxo.
-
Garanta que você tenha uma instância do Pact Broker rodando localmente. Para maiores informações, vide sessão configuração do Pact Broker.
-
Abra os projetos contido neste diretório (
consumer
eprovider
) em sua IDE de preferência e instale suas dependências. Se estiver usando o IntelliJ, você também precisará instalar o Plugin do Lombok. -
Para gerar o contrato, basta rodar os testes Junit do projeto
consumer
.
Obtendo sucesso, o plugin maven do Pact irá gerar um arquivo json contendo o contrato entre as APIs. Veja os exemplos nas imagens abaixo.
- Com o contrato gerado, podemos publicá-lo no Pact Broker.
Para isto, podemos utilizar o plugin maven do Pact.
É necessário confirmar que o plugin está configurado corretamente.
Após confirmar o status do plugin, abra outro terminal no diretório consumer
e execute o seguinte comando para publicar o contrato no Broker:
mvn pact:publish
Em seguida, você poderá ver o contrato publicado no Pact Broker http://localhost:9292
.
- Com o contrato publicado no Broker, agora validaremos se a API provedora (provider) está aderente ao contrato.
No projeto provider
, rode os testes Junit e verifique se eles são concluídos com sucesso.
Este teste irá verificar no Broker os contratos disponiveis para validação, baixá-los e testá-los de acordo com a API provedora.
Para este passo, configuramos para que a publição do resultado seja feita automaticamente assim que a validação do contrato ocorre.
Veja a configuração em: AccountProviderPactTest.java linha 41
System.setProperty("pact.verifier.publishResults", "true");
Para verificar o resultado, basta acessar novamente o Broker.