Skip to content

Desafio para criação de microservices a partir da API World Bank

Notifications You must be signed in to change notification settings

mikenew01/mcp-world-bank

Repository files navigation

Bem-vindo ao MCP WorlBank API

Serviço responsável por consultar informações de indicadores e paises das APIs do World Bank

Desafio

O Banco Mundial https://www.worldbank.org/ mantém uma série de indicadores econômicos, disponibilizados web, arquivos para download, e APIs. Um desses dados é o indicador que avalia a quantidade de pessoas em situação de extrema pobreza no mundo, vivendo com até $ 1,90/dia. Este desafio consiste em construir uma aplicação que apresente os indicadores de determinado país (um voz vez), ordenados por ano. A aplicação deve permitir que o usuário digite o código do país para em seguida solicitar os índices históricos. Ou seja, quando o usuário entrar no sistema, irá visualizar um formulário, após o preenchimento e submissão desse, será apresentada uma tabela com o resultado obtido da API do Banco Mundial.

  • Backend - API Rest
  • Frontend

Estrutura dos microservices

As nomenclaturas 'producer' e ' consumer' são para facilitar o entendimento do projeto e demostração de como consumir outro microservice na arquitetura.

  • backend-worldbank-producer: Responsável por acessar API do WorldBank.
  • bakcend-worldbank-consumer: Responsável por consumir API do Producer.

Introdução Arquitetura

Durante o desenvolvimento foram tomadas algumas decisões com relação a tecnologias usadas. O backend foi desenvolvido utilizando o framework Quarkus por questões de produtividade e desempenho em relação a outras arquiteturas.

Algumas ferramentas foram adicionadas para monitoração e logs na aplicação, dentre elas: Prometheus, Jaeger, Elasticsearh, Logstash, Grafana e Kibana. Utilizando as integrações que o quarkus oferece.

Aplicação foi pensada para ser resiliente e tolerante a falhas.


Observação: O projeto foi desenvolvido utilizando o Windows e por isso algumas configurações no docker/docker-compose podem ser diferentes para cada sistema operacional. O Docker do Windows não possui suporte ao modo 'host' na criação de rede entre containers e por isso foi utilizado em alguns casos a propriedade 'host.docker.internal' para contornar esse problema.


Ferramentas complementares

Ferramenta Descrição
Prometheus Sistema de monitoramento para analise de metricas das aplicações
Jaeger Sistema de rastramento para requisições
ELK Sistema centralizador de logs. Elasticsearch, Logstash e Kibana
Quarkus Framework utilizado para criar o backend
Grafana Sistema de monitoramento e dashboards

Ambiente de desenvolvimento

Existem alguns passos para execução do projeto em ambiente local, necessário que alguns programas estejam corretamente instalados.

Framework/lib Versão Recomendada S.O Utilizado
Maven 3.6.3 Windows
JDK 11 Windows
Docker 19.03.13 Windows
Docker Compose 1.27.4 Windows
Intellij - Windows

Execução do projeto

Passo 1

Faça o clone do projeto

$ git clone https://github.com/Maikoncanuto/mcp-world-bank.git mcp-world-bank

Passo 2

Entre na pasta raiz do projeto

$ cd mcp-world-bank

Passo 3

$ cd backend

Passo 4

Executar o comando do maven para gerar o artefato que será publicado no docker

$ cd mvn clean install

Passo 5

Voltar para pasta raiz

$ cd ..

OBS: Replicar Passo 3, 4 e 5 para o consumer e producer

Passo 6

Execute o comando para levantar toda infraestrutura necessária

$ docker-compose up --build

Acompanhar logs:

$ docker-compose logs -f

OU

Execute o projeto com comando do quarkus dentro da pasta do backend

$ ./mvnw compile quarkus:dev

ou

java -jar target/worldbank-0.0.1-SNAPSHOT-runner.jar

Serviços do mcp-quote-api

Todos os endpoints informados abaixo servem para o microservice de produtor e consumidor nas respectivas portas [8080, 8081]

Serviço URL Status Descrição
Swagger Producer http://localhost:8080/swagger-ui/#/ Informação dos endpoints na aplicação
Health Live http://localhost:8080/health/live Responsável por identificar a sáude da aplicação
Health Ready http://localhost:8080/health/ready Responsável por identificar se aplicação está pronta para uso
Jaeger http://localhost:8180 Rastreamento de requisições
Prometheus http://localhost:8280 Analise de Métricas da aplicação
Kibana http://localhost:8380 Visualizar Logs
Grafana http://localhost:8480 Monitoramento e Dashboards

Exemplo de requisições para os Endpoints

Buscar informações de paises

Url de requisição:

http://localhost:8080/api/v1/paises

Parametrôs:

Parâmetro Obrigatorio Formato Tipo Descrição Exemplo
paginaAtual Opcional X number Número da página para exibição 2
porPagina Opcional X number Número de itens por página 50

Curl:

curl -X GET "http://localhost:8080/api/v1/paises?paginaAtual=1&porPagina=50" -H  "accept: */*"

Retorno:

{
  "code": "200",
  "data": {
    "paginacao": {
      "paginaAtual": 1,
      "quantidadePaginas": 7,
      "total": 304,
      "porPagina": 50
    },
    "paises": [
      {
        "codigoPais": "ABW",
        "nome": "Aruba",
        "capital": "Oranjestad"
      },
      {
        "codigoPais": "AFG",
        "nome": "Afghanistan",
        "capital": "Kabul"
      },
      {
        "codigoPais": "AFR",
        "nome": "Africa",
        "capital": ""
      }
    ]
   },
   "erro": null 
}

/api/v1/indicators/{id}

Url de requisição:

http://localhost:8080/api/v1/indicadores/ABW

Parametrôs Query:

Parâmetro Obrigatorio Formato Tipo Descrição Exemplo
codigoPais Obrigatorio XXX string Código do pais ABW
paginaAtual Opcional X number Número da página para exibição 2
porPagina Opcional X number Número de itens por página 50

Curl:

curl -X GET "http://localhost:8080/api/v1/indicadores/ABW?paginaAtual=1&porPagina=50" -H  "accept: */*"

Retorno:

{
  "code": "200",
  "data": {
    "paginacao": {
      "paginaAtual": 1,
      "quantidadePaginas": 2,
      "total": 61,
      "porPagina": 50
    },
    "indicadores": [
      {
        "dataAno": 1971,
        "codigoPais": "ABW",
        "nomePais": "Aruba",
        "indicador": "Poverty headcount ratio at $1.90 a day (2011 PPP) (% of population)",
        "codigoIndicador": "SI.POV.DDAY"
      },
      {
        "dataAno": 1972,
        "codigoPais": "ABW",
        "nomePais": "Aruba",
        "indicador": "Poverty headcount ratio at $1.90 a day (2011 PPP) (% of population)",
        "codigoIndicador": "SI.POV.DDAY"
      }
      ]
    },
  "erro": null 
}

About

Desafio para criação de microservices a partir da API World Bank

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published