Serviço responsável por consultar informações de indicadores e paises das APIs do World Bank
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
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.
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.
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 |
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 |
Faça o clone do projeto
$ git clone https://github.com/Maikoncanuto/mcp-world-bank.git mcp-world-bank
Entre na pasta raiz do projeto
$ cd mcp-world-bank
$ cd backend
Executar o comando do maven para gerar o artefato que será publicado no docker
$ cd mvn clean install
Voltar para pasta raiz
$ cd ..
OBS: Replicar Passo 3, 4 e 5 para o consumer e producer
Execute o comando para levantar toda infraestrutura necessária
$ docker-compose up --build
Acompanhar logs:
$ docker-compose logs -f
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
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 |
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
}
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
}