O projeto está sendo desenvolvido utilizando como base o curso Spring Boot, Hibernate, REST, Ionic, JWT, S3, MySQL, MongoDB (https://www.udemy.com/course/spring-boot-ionic/ ). Esse é um excelente curso, indicado para quem está começando a aprender e também para quem já tem conhecimentos em Spring Boot.
Dica: No decorrer do curso o professor desenvolve uma API para delivery, como eu já possuo conhecimentos básicos em Spring Boot, achei melhor não reproduzir o mesmo sistema, ou seja, enquanto o professor desenvolvia a API para sistema de pedidos online eu desenvolvi uma API para realizar o gerenciamento de cartão de crédito e faturas, com isso, o meu aprendizado foi muito melhor.
Esse é um projeto apenas para estudo que vai permanecer em constante desenvolvimento, o objetivo principal é obter mais conhecimentos em:
- ✔️ Spring Boot
- ✔️ Docker
- ✔️ API Rest
- ✔️ Swagger
- ✔️ Postman
- ✔️ MySQL
- ✔️ Hibernate
- ✔️ Git
- ✔️ JWT - JSON Web Tokens
- ✔️ Spring Security
- ✔️ Java
- ✖️ TDD
- ✖️ RabbitMQ
- ✖️ Jenkins
- Instalar e configurar o java 8 .
- Instalar e configurar o MySql.
- Clonar esse repositório: git clone git@github.com:Clayder/finance-API.git
- Acessar a pasta do projeto e executar o Maven
- Configurar o arquivo src/main/resources/application.properties inserindo os dados do banco de dados.
- Executar o Spring App
- Realizar as configurações abaixo do Postman
- Instalar o docker: https://www.digitalocean.com/community/tutorials/como-instalar-e-usar-o-docker-no-ubuntu-18-04-pt
- Instalar o docker compose: https://www.digitalocean.com/community/tutorials/how-to-install-docker-compose-on-ubuntu-18-04-pt
- Acessar o projeto via terminal
- Executar: docker-compose up db
Como importar projetos no Postman ? Clique aqui !!
Para consumir a API utilizando o Postman, importar os arquivos abaixo:
-
Cartão de crédito https://raw.githubusercontent.com/Clayder/finance-API/master/public/postman/Cart%C3%A3o%20de%20cr%C3%A9dito.postman_collection.json
-
Faturas https://raw.githubusercontent.com/Clayder/finance-API/master/public/postman/Faturas.postman_collection.json
-
Variáveis de ambiente https://raw.githubusercontent.com/Clayder/finance-API/master/public/postman/Desenvolvimento.postman_environment.json
-
Resources: Controladores rests.
-
Services: Camada que realiza a integração com o Repository, ou seja, essa camada implementa a interface Repository.
-
Repositories: Interface de comunicação para o acesso aos dados.
-
Domain: Onde fica armazenado os dados da tabela da classe.
-
DTO: Camada responsável por manipular o JSON que será exibido no response.
-
Resource/Exception:
1.1. classe ResourceExceptionHandler: Tem a função de interceptar e tratar as exceções lançadas nos resources (controllers). Essa classe possui uma annotation chamada @ControllerAdvice, ele que intercepta as exceções geradas por métodos anotados com @RequestMapping. Mais informações:https://medium.com/@jovannypcg/understanding-springs-controlleradvice-cd96a364033f
-
Services/Exception: Possui as classes que criam exceções personalizadas.
A documentação da API foi feita utilizando o Swagger e toda essa geração de documentação foi feita utilizando a biblioteca SpringFox. Os links abaixo possuem excelentes explicações de como utilizar essa biblioteca com Spring Boot.
-
Site oficial da biblioteca: http://springfox.github.io/springfox/
-
Tutorial: https://www.treinaweb.com.br/blog/documentando-uma-api-spring-boot-com-o-swagger/
-
Exemplos de utilização:
Para acessar a documentação do projeto é só inicializar o servidor e acessar http://localhost:8080/swagger-ui.html#/
A segurança do projeto foi feito utilizando o Spring Security, através dessa biblioteca é possível gerar o JWT, para realizar a autenticação na API.
O que é JWT: https://medium.com/tableless/entendendo-tokens-jwt-json-web-token-413c6d1397f6
Para realizar a geração do JWT, tem que ser feita uma requisição POST http://localhost:8080/login , passando o login e senha do usuário.
{
"email": "admin@gmail.com",
"password": "12345678"
}
Se ocorrer tudo ok, a API vai retornar status code 200 e com o JWT no header (Authorization) do response .
É necessário passar o Authorization em todos os outros endpoints da API (menos no POST /login)
Através do site https://jwt.io/ é possível entender melhor o conteúdo desse token JWT e até mesmo visualizar o seu tempo de expiração (exp) no PAYLOAD:DATA.