É uma API que fornece a conversão entre as principais moedas do mercado mundial. As taxas de conversão são obtidas através da plataforma https://exchangeratesapi.io/, que conta com mais de 15 fontes de taxas de câmbio e está entregando dados para mais de 170 moedas mundiais.
- Git
- JDK 11
- Apache Maven
git clone git@github.com:thiagosena/currency-converter.git
cd currency-converter
mvn compile quarkus:dev
Após a compilação do projeto, basta acessar o endereço http://localhost:8080
A API possui 4 endpoints:
Método | Endpoint | Descrição | Exemplo |
---|---|---|---|
GET | /api/v1/convert | Faz a conversão de uma moeda pra outra |
curl -X 'GET' \ 'https://currencyconverterapi.thiagosena.com/api/v1/convert?source=EUR&target=BRL&user_id=1&value=5' \ -H 'accept: application/json'Retorno: { "conversionRate": 6.13362, "dateTime": "2021-06-14T17:53:54.449717", "id": 1, "sourceCurrency": "EUR", "sourceValue": 5, "targetCurrency": "BRL", "targetValue": 30.6681, "userId": 1 } |
GET | /api/v1/transactions | Lista todas as transações efetuadas por um usuário |
curl -X 'GET' \ 'https://currencyconverterapi.thiagosena.com/api/v1/transaction?user_id=1' \ -H 'accept: application/json'Retorno: [ { "conversionRate": 6.193318, "dateTime": "2021-06-14T04:09:22.657742", "id": 1, "sourceCurrency": "EUR", "sourceValue": 1, "targetCurrency": "BRL", "userId": 1 } ] |
POST | /api/v1/user | Efetua o cadastro de um usuário |
curl -X 'POST' \ 'https://currencyconverterapi.thiagosena.com/api/v1/user' \ -H 'accept: */*' \ -H 'Content-Type: application/json' \ -d '{ "name": "Felipe" }'Retorno: { "id": 3, "name": "Felipe" } |
GET | /api/v1/users | Lista todos os usuários |
curl -X 'GET' \ 'https://currencyconverterapi.thiagosena.com/api/v1/users' \ -H 'accept: application/json'Retorno: [ { "id": 1, "name": "Joao" }, { "id": 2, "name": "Acheropita Nagazaki" } ] |
Para visualizar a documentação completa da API, basta acessar o endereço https://currencyconverterapi.thiagosena.com/swagger-ui/
Figura 1: Documentação da API com Swagger-UI
Figura 2: Protótipo de interface utilizando a API de conversão do projeto
A API foi desenvolvida utilizando a linguagem JAVA 11 e o framework Quarkus
O Quarkus é um framework java open source desenvolvido pela Red Hat e lançado no final de 2018. Foi desenvolvido sob medida para o GraalVM e OpenJDK HotSpot, com a promessa de ter um startup muito rápido e pouco gasto de memória de footprint, sendo assim um framework ótimo para cloud (ex: k8s), microservices e também serverless.
Figura 4: Benchmark do framework Quarkus
Na Figura 4, extraída do site https://www.openshift.com/blog/quarkus-is-here-for-your-java, é possível ver dados de tempo de inicialização e consumo de memória com um executável nativo ou utilizando a JDK.
- Maven: Build e Controle de dependências
- H2 Database: Banco de dados emdbedded
- Hibernate ORM com Panache: Simplificar a camada de persistência
- Flyway: Controle de versão do banco de dados
- SmallRye Health: Monitorar a saúde da aplicação
- JUnit 5: Implementação de casos de testes
Figura 5: Tela inicial do JaCoCo com 100% de cobertura de testes
- SonarCloud: Melhorar a qualidade e segurança do código.
Figura 6: Tela inicial do projeto no SonarCloud
O processo de execução dos testes estão sendo realizados no github action com o SonarCloud. O code deploy foi implementado utilizando a infraestrutura da AWS. Para isso, se a build, junto com os testes e o SonarCloud forem executados com sucesso, o github action envia um trigger para o AWS Pipeline fazer a execução do deploy.
Figura 7: Arquitetura da infraestrutura para AWS ECS com AWS CodePipeline e Github Actions