Rodando Wiremock no Docker

Uma forma simples e eficaz para simular uma API que ainda não está pronta

Image Credits: author derivative work of Wiremock logo and Docker logo (flickr.com)

Cada vez mais frequentemente, sistemas são desenvolvidos a partir de integrações e interações com outros sistemas, o que nada mais são do que as famosas APIs.

Em muitos casos, quando começamos a desenvolver uma solução não temos todas as fontes de origem de dados respondendo, ou seja, são muitos os casos nos quais o desenvolvimento das APIs ocorre de forma paralela. Agora, imagine que você esteja desenvolvendo uma feature que depende de uma API que ainda está sendo desenvolvida?

Bem, não precisa se desesperar. Conforme nosso amigo Eriton descreveu muito bem no artigo “Conheça a WireMock”, é possível usar esta ferramenta para realizar testes de serviços com base em um payload esperado, testar cenários de falha e timeout, vislumbrar uma UI para validação de designer e mais um monte de coisas.

E aí você deve estar se perguntando: por que eu vou continuar lendo esse artigo se a informação está no outro? Calma que eu vou te explicar.

Nesse ponto já identificamos o quanto o Wiremock pode nos ajudar, mas agora imagine se rodarmos em um container Docker, ou seja, um ambiente isolado, portátil, de fácil execução e implementação? Assim, podemos “simular” não somente o payload de resposta mas também o endereçamento e comunicação entre os serviços.

Um exemplo mais prático desta implementação seria você deployar esse container com o Wiremock em um cluster Kubernetes, por exemplo, fazer seu aplicativo chamá-lo para a obtenção de dados e, quando a API final ficar pronta e estiver disponível, você só precisaria alterar o endpoint da chamada para "virar a chave" de dados fakes para os dados reais.

Vamos ver, então, como ter o nosso container Docker pronto para rodar o Wiremock e, assim, ter nosso emulador de API portátil.

Disponibilizei no Github um repositório com a estrutura básica de arquivos que você vai precisar para criar sua imagem Docker e rodar seu container, e para acessar é só você clicar aqui. Claro que não fiz tudo sozinho, então vou deixar nas referências as fontes que serviram de base para essa implementação.

Depois de baixar o repositório você terá a seguinte estrutura:

Arquivos:

docker-compose.yml — contém as definições de serviços que você colocar para rodar.

docker-entrypoint.sh — script de inicialização da aplicação. É a execução deste script, no momento da criação do container, que faz sua aplicação rodar;

Dockerfile — define como a imagem Docker será criada para poder ser usada quando for subir o container;

README.md — informações do projeto. Dica: aqui você pode adicionar as rotas de respostas que você criou;

Diretório:

mappings — local onde você cria os arquivos .json que serão as respostas de sua aplicação.

__files — neste diretório temos um arquivo .json somente para apoiar a geração

Hora de por a mão na massa…

Passo 1:
Faça o clone do repositório

git clone https://github.com/ronaldorts/api-emulator

Passo 2:
Gere a imagem Docker com o seguinte comando:

docker build -t ronaldorts/api-emulator .

*Aqui você escolhe o nome/tag para sua imagem.

Importante, o nome que você der para a sua imagem deverá ser indicado no seu docker-compose.yaml.

Passo 3:
Após criar sua imagem e editar docker-compose.yaml com o nome da imagem que você criou, basta rodar o comando docker-compose up e sua API fake estará pronta para ser usada.

Vale lembrar que você precisa estar no diretório do seu docker-compose.yaml.

Para esse exemplo teremos quatro endpoints:

http://localhost:8081/ready, que retorna um ID randômico de exemplo

http://localhost:8081/health, que retorna “Health” no body

http://localhost:8081/cpf/valido, que retorna um payload para a chamada de um CPF válido

e http://localhost:8081/cpf/invalido, que retorna um payload para a chamada de um CPF inválido

Você pode adicionar novos endpoints adicionando arquivos xxxx.json na pasta mappings, seguindo o modelo descrito abaixo:

{
"request": {
"method": "GET",
"url": "/api/mytest"
},
"response": {
"status": 200,
"body": "More content\n"
}
}

E é isso! Seguindo esses passos temos nossa API portátil pronta para ser levada e usada, onde quiser. Ficou alguma dúvida ou tem algo a acrescentar? Aproveite os campos de comentários. E se quiser fazer parte do time de Digital Product Development da Accenture, é só dar uma olhada aqui e se candidatar a alguma de nossas vagas. Até a próxima!

Referências:

https://medium.com/digitalproductsdev

http://wiremock.org/docs/running-standalone/

https://github.com/rodolpheche/wiremock-docker

--

--

--

Nós desenvolvemos produtos digitais com inovação, agilidade e excelentes práticas, para que o mercado brasileiro e latino-americano acompanhe a velocidade do mercado digital mundial.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Ronaldo Santos

Ronaldo Santos

More from Medium

Shell Linter: A Convenient Way to Run ShellCheck in Github Actions

API Gateway — Custom Authorizer arn changes not reflecting — Authorizer Error

Configuring APIGateway VTL to store JSON object directly on S3 —With Lambda authorizer enabled

How to Fix ERR_SSL_VERSION_INTERFERENCE Error?