DEV Community

Francisco Zanfranceschi
Francisco Zanfranceschi

Posted on

[Desafio] - Integração com Múltiplas APIs (scatter/gather)

Conteúdo original nessa thread do Twitter


Ei, dev!

Você está prestes a aceitar o desafio mais legal de 2022! São 3 níveis de dificuldade pra todo mundo participar.

É sobre uma aplicação de cotação financeira com integração com outras APIs (que já fiz pra você com muito carinho).

cc @sseraphini

img


Se você estiver iniciando, seu desafio é fazer uma integração chamando uma API que devolve uma cotação fictícia. A chamada é a seguinte:

GET /servico-a/cotacao?moeda=USD

img


Se quiser algo mais desafiador, faça chamadas para os serviços A e B:

GET /servico-a/cotacao?moeda=USD
GET /servico-b/cotacao?curr=USD

Esses 2 serviços têm um delay proposital pra que você exercite fazer chamadas em paralelo (com promise, future, async, await, etc). De boa?

img

img


Os serviços A e B têm retornos diferentes, tanto para chamadas inválidas (um retorna 400 e outro 422) quanto para as válidas. Afinal, são serviços diferentes. 😏

Retorne a melhor cotação dentre os dois serviços, ok?


Agora, se você quiser sangue mesmo 🩸, integre também com o serviço C! Ele tem um processamento assíncrono que fará um callback (webhook) para a URL que informar após terminar a cotação.

Image


O maior desafio na integração com o serviço C é, a partir de um processo síncrono da sua parte (imagine você disponibilizar uma API para a melhor cotação dentre as 3), tratar o retorno assíncrono do serviço C. Use o cid (correlation id) para isso.


O callback do serviço C é um POST para a URL que informar com o payload como na imagem.

(obs.: se estiver usando docker + ambiente local, use os endereços "especiais" http://172.17.0.1:(porta) ou http://host.docker.internal:(porta) pro docker conseguir acessar seu ambiente).

Image


Bom, você tem algumas opções para rodar essas APIs que fiz pra você:

  • Via docker (que é o mais simples); ou
  • Baixar e executar o código hospedado no github.

(Essas 3 APIs, na verdade são apenas um codebase/imagem com 3 endpoints representando cada serviço.)


Docker:

A imagem docker para esse desafio está disponível no dockerhub e pra sair usando é só executar:

docker run --rm -p 8080:80 zanfranceschi/desafio-01-cotacoes

https://hub.docker.com/repository/docker/zanfranceschi/desafio-01-cotacoes

Image


Código fonte:

Se quiser executar localmente, fazer modificações, etc, está tudo disponível no github.

https://github.com/zanfranceschi/desafio-01-cotacoes


Seria muito top se você criasse um repositório git com a sua integração! E claro, como sempre, faça do jeito que você quiser ─ o importante é sempre aprender se divertindo!

Muito obrigado se leu até aqui! Se curtiu essa desafio, dá um RT no primeiro tweet, like e comenta!

Top comments (0)