Este projeto consiste em uma API REST de um Fórum Online construída com Java e alguns módulos do Spring Framework. Todo o código foi escrito como prática e registro do meu aprendizado durante os cursos Spring Boot API REST da Alura, conduzidos pelo instrutor Rodrigo Ferreira.
Para testar o projeto, primeiramente devemos utilizar o Maven para instalar as dependências declaradas no pom.xml
. Em seguida, devemos indicar com quais configurações de ambiente queremos subir a aplicação: dev, test ou prd. Se estivermos rodando o projeto diretamente de uma IDE, podemos indicar isso da seguinte forma:
// No Eclipse: Run Canfigurations -> “VM arguments”
-Dspring.profiles.active.dev
// No IntelliJ: Run -> Edit Configurations -> "Program arguments"
--spring.profiles.active=dev
Além disso, se as configurações de prd forem indicadas, devemos fornecer as variáveis de ambiente para o banco de dados e para o secret da geração de tokens JWT (essas variáveis estarão listadas logo abaixo). Assim, uma outra opção é fazer o build do projeto e rodar a aplicação a partir de um arquivo .jar
, bastando executar mvn clean package
e em seguida:
java \
-DFORUM_DATABASE_URL=DATABASE:h2:mem:forumdb \
-DFORUM_DB_USERNAME=sa \
-DFORUM_DB_PASSWORD= \
-DFORUM_JWT_SECRET=123456 \
-Dspring.profiles.active.prd \
-jar forum-api-0.0.1-SNAPSHOT.jar \
/
Por fim, o projeto também conta com um Dockerfile
que permite construir uma imagem e subir a aplicação em um container com Docker:
docker build . -t forum/forum-api
docker run \
-p 8080:8080 \
-e FORUM_DATABASE_URL='DATABASE:h2:mem:forumdb' \
-e FORUM_DB_USERNAME='sa' \
-e FORUM_DB_PASSWORD='' \
-e FORUM_JWT_SECRET='123456' \
-e SPRING_PROFILES_ACTIVE='prd' forum \
/forumapi \
/
Para conhecer todos os endpoints e como montar as requisições, basta acessar localhost:8080/swagger-ui.html
. Em dev, todos os endpoints estão abertos e não exigem autenticação. Em prd, no entanto, é preciso gerar um token JWT em POST /auth
para que seja possível fazer outras requisições.
Alguns dos tópicos estudados durante o curso e implementados neste código:
- Exposição de endpoints com
@RestController
- Uso dos padrões
DTO
eForm
para entrada e saída de dados Spring Data
eHibernate
para persistência, busca e manipulação dos dados- Montagem de respostas com
ResponseEntity
- Validação de dados com
Bean Validation
- Tratamento de exceções com
@RestControllerAdvice
- Paginação e ordenação com
Pageable
,Direction
eSpringDataWebSupport
- Cache com
@Cacheable
e@CacheEvict
- Configurações de autenticação e autorização com
Spring Security
- Geração e validação de JWT com a lib
jjwt
e filtroOncePerRequestFilter
- Monitoramento com
Spring Boot Actuator
eSpring Boot Admin
- Documentação com
SpringFox Swagger
- Configurações de ambientes com
@Profile
- Testes automatizados dos beans do Spring com
@SpringBootTest
,@DataJpaTest
eMockMvc
- Build e deploy da aplicação com
Maven
eDocker
Estou em processo de formação e aprendizagem. Qualquer dica ou correção que você tenha, ficarei feliz em ouvir e implementar nos meus projetos.