Um projeto, destinado à aprendizagem pessoal, que implementa Rate Limiting e Client Side Caching com o objetivo de criar uma API robusta voltada para dados climáticos. Para acessar dados climáticos foi-se utilizado a API 3rd party Visual Crossing Weather API.
Durante o projeto, segui padrões para organizar commits através da especificação Conventional Commits e criei um padronizamento das pastas voltadas à seção de testes. A API 3rd party tem um limite diário de requisições.
- Java
- Maven
- Intellij IDEA
- Springboot
- JUnit
- Mockito
- Redis
- Bucket4J
O projeto não segue o padrão REST nem implementa HATEOAS. É dividido nas seguintes camadas:
- Controller: responsável pelo processamento de requisições.
- Service: responsável pela regra de negócio, a conexão com o servidor redis e a conexão com a API 3rd party.
- Redis: responsável pelo client-side caching.
- Bucket4J: responsável pelo rate-limiting.
Pega informações do clima num determinado local num período de até 5 dias. Necessário colocar o local (location), data de início (startDate) e data de término (endDate). Retorna horário, temperatura média, descrição e sensação térmica.
----> Para obter uma API KEY, crie uma conta no openvisual <----
- Java 21
- Redis
- Download do .jar do projeto
- Inicialize o servidor Redis.
- Abra o terminal numa pasta contendo o projeto.
- Configure as seguintes variavéis do ambiente: API_KEY, REDIS_PASSWORD.
- Use o comando "java -jar your-application.jar" para iniciar o projeto.
Pronto! O projeto inicializará e você conseguirá interagir com ele mandando requisições HTTP através de aplicativos como Postman.
- Docker
- Download do projeto com docker
- Inicialize o docker.
- Abra o terminal numa pasta contendo o projeto.
- Altere as variáveis do ambiente no arquivo .env.
- Use o comando 'docker-compose up'.
Pronto! O projeto inicializará e você conseguirá interagir com ele mandando requisições HTTP através de aplicativos como Postman.
Os testes seguem a seguinte nomenclatura para seus nomes:
nomeOriginalDaFunção_EstadoAtual_ComportamentoDesejado
Então, quando testamos, com o objetivo de averiguar o "caminho feliz", a função receberItemQuebrado, esperamos que receba ItemQuebrado e retorne ItemConsertado. Logo o teste terá o seguinte nome:
_receberItemQuebrado_RecebeItemQuebrado_RetornaItemConsertado
Em testes que averiguamos os codigos de status HTTP retornados, adicionamos o resultado ao ComportamentoDesejado.
Foi-se divido em 3 pastas principais
- Slice, para slice tests.
- Unit, para testes de unidade. Cada uma contém pastas replicando a estrutura de pastas do projeto, abrangendo somente as camadas que foram testadas.
