DEV Community

Francisco Zanfranceschi
Francisco Zanfranceschi

Posted on

8 1

[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!

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

Top comments (0)

Heroku

Simplify your DevOps and maximize your time.

Since 2007, Heroku has been the go-to platform for developers as it monitors uptime, performance, and infrastructure concerns, allowing you to focus on writing code.

Learn More