Java RESTful API
- Java 17: Utilizaremos a versão LTS mais recente do Java para tirar vantagem das últimas inovações que essa linguagem robusta e amplamente utilizada oferece;
- Spring Boot 3: Trabalharemos com a mais nova versão do Spring Boot, que maximiza a produtividade do desenvolvedor por meio de sua poderosa premissa de autoconfiguração;
- Spring Data JPA: Exploraremos como essa ferramenta pode simplificar nossa camada de acesso aos dados, facilitando a integração com bancos de dados SQL;
- OpenAPI (Swagger): Vamos criar uma documentação de API eficaz e fácil de entender usando a OpenAPI (Swagger), perfeitamente alinhada com a alta produtividade que o Spring Boot oferece;
- Railway: facilita o deploy e monitoramento de nossas soluções na nuvem, além de oferecer diversos bancos de dados como serviço e pipelines de CI/CD.
O Figma foi utilizado para a abstração do domínio desta API, sendo útil na análise e projeto da solução.
classDiagram
class User {
- Long id
- String name
- Account account
- Feature[] features
- Card card
- News[] news
}
class Account {
- Long id
- String number
- String agency
- Number balance
- Number limit
}
class Card {
- Long id
- String number
- Number limit
}
class BaseItem {
- Long id
- String icon
- String description
}
class News {
}
class Feature {
}
News --|> BaseItem
Feature --|> BaseItem
User "1" *-- "1" Account
User "1" *-- "N" Feature
User "1" *-- "1" Card
User "1" *-- "N" News
O Spring Boot permite configurar diferentes perfis de execução para a aplicação. Utilizamos dois arquivos de configuração:
application-dev.yml
: Contém configurações para o ambiente de desenvolvimento, utilizando o banco de dados H2.application-prd.yml
: Contém configurações para o ambiente de produção, utilizando PostgreSQL.
Para definir qual perfil deve ser usado ao rodar a aplicação, é necessário configurar a variável de ambiente SPRING_PROFILES_ACTIVE
.
Isso pode ser feito no "Edit Configurations" da IDE:
Adicionando a seguinte configuração em "Environment Variables":
SPRING_PROFILES_ACTIVE=dev
Com essa configuração, a aplicação rodará em modo de desenvolvimento (dev
).
-
Model: Representa a estrutura do banco de dados e define como os dados serão armazenados e recuperados. Cada entidade mapeia uma tabela no banco de dados.
-
Service: A camada de serviço contém a lógica de negócios. Ela é responsável por orquestrar as operações necessárias entre o controlador (Controller) e o repositório (Repository).
-
Controller: O controlador é responsável por expor os endpoints da API. Ele gerencia as requisições e interage com a camada de serviço para fornecer a resposta adequada.
Foi criado com as seguintes dependências usando o Spring Initializr:
- Spring Data JPA: Para persistência de dados.
- PostgreSQL: Banco de dados relacional utilizado para armazenar as informações.
- Spring Web: Para criar a API RESTful.
- Lombok: Para reduzir a verbosidade do código.
- Spring DevTools: Para acelerar o desenvolvimento com reinicialização automática.
- H2 Database: Para desenvolvimento local, quando necessário.
Para acessar o banco de dados H2 local, utilize o seguinte URL:
- URL do console do H2: http://localhost:8080/h2-console/
Para documentar a API, foi adicionada a dependência do Swagger no arquivo pom.xml
:
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>2.2.0</version>
</dependency>
A documentação gerada pode ser acessada no seguinte URL:
- Swagger UI: http://localhost:8080/swagger-ui/index.html
O deploy foi feito usando a plataforma Railway:
-
Criar o banco de dados PostgreSQL.
-
Configurar variáveis de ambiente no arquivo
application-prd.yml
.Adicione as variáveis de ambiente para o arquivo de configuração de produção. Exemplo:
# Essas configurações são usadas em produção com PostgreSQL
spring:
datasource:
url: jdbc:postgresql://${PGHOST}:${PGPORT}/${PGDATABASE} # URL de conexão com o banco PostgreSQL
username: ${PGUSER} # Nome de usuário do banco de dados
password: ${PGPASSWORD} # Senha do banco de dados
jpa:
open-in-view: false # Desativa o "Open Session in View" para melhorar o desempenho
hibernate:
ddl-auto: create # Cria as tabelas ao rodar pela primeira vez
-
É necessário configurar as variáveis de ambiente, como
${PGUSER}
, com as informações do banco criado.
Após a primeira execução, onde as tabelas são criadas automaticamente, altere a configuração ddl-auto
para evitar que as tabelas sejam recriadas a cada execução.
spring:
jpa:
hibernate:
ddl-auto: validate # Valida o esquema do banco de dados sem modificá-lo
Para realizar o deploy da aplicação na nuvem utilizando Railway, siga o tutorial descrito aqui.
---