Skip to content

About

API REST feita com Java e Spring que faz um CRUD básico, conternizei ela com Docker e conectei ela com um banco de dados PostgreSQL conternizado via redes do Docker Compose.

Resources

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

10 Commits

Folders and files

Repository files navigation

Crud via API Rest - Java, Spring Boot, Flyway, PostgreSQL

Descrição :

API REST que faz operações CRUD (Create, Read, Update, Delete) sobre usuários armazenados em um banco de dados PostgreSQL.

Demonstração em video :

2025-07-07.00-18-32.mp4

Spring Boot Java PostgreSQL

✨ Principais Funcionalidades

  • Arquitetura em camadas bem definida

    • Separação clara entre Controller, Service e Repository, promovendo alta coesão e baixo acoplamento.
      image
  • Uso de DTOs como registros (Java record)

    • CreateUserDTO e UpdateUserDTO deixam explícita a estrutura de entrada, facilitando manutenção, validação e documentação automática.
      image
  • Injeção de dependências via construtor

    • Tornando o código mais desacoplado e facilitando a testabilidade (sem uso de @Autowired diretamente nos campos).
  • API RESTful seguindo convenções HTTP

    • POST /v1/users → cria novo usuário (201 Created + cabeçalho Location).
    • GET /v1/users/{id} → pesquisa por ID (200 OK ou 404 Not Found).
    • GET /v1/users → lista todos os usuários (200 OK).
    • PUT /v1/users/{id} → atualiza parcialmente um usuário (204 No Content).
    • DELETE /v1/users/{id} → remove usuário (204 No Content).
  • Tratamento de entradas e conversão de tipos

    • Converte String → Integer de forma segura e usa Optional para evitar NullPointerException.
  • Uso de Spring Data JPA

    • UserRepository estende JpaRepository, aproveitando métodos prontos como findById, findAll, save, existsById e deleteById.
  • Atualização condicional de campos

    • No método de update, só altera um campo se o valor no DTO for não-nulo, permitindo comportamento de patch.
  • Resposta padronizada e amigável

    • Uso de ResponseEntity para controlar status HTTP e corpo de resposta de forma explícita.
  • Script de criação de tabela SQL

    CREATE TABLE user_tb (
       id SERIAL PRIMARY KEY,
       first_name VARCHAR(255),
       last_name  VARCHAR(255),
       email      VARCHAR(255),
       password   VARCHAR(255)
    );

🛠️ Tecnologias Utilizadas

  • Java 24
  • Spring Boot 3.5.0
  • Spring Web (Spring MVC)
  • Spring Data JPA
  • PostgreSQL 14
  • Maven

📦 Como Executar

  1. Clone o repositório:

    git clone https://github.com/seu-usuario/seu-projeto.git
  2. Configure o banco de dados em application.properties:

    spring.datasource.url=jdbc:postgresql://localhost:5432/seu_db
    spring.datasource.username=usuario
    spring.datasource.password=senha
  3. Execute a aplicação:

    mvn spring-boot:run

Pronto! A API estará disponível em http://localhost:8080/v1/users.

☸️ Executando no Kubernetes

Os manifests em k8s/ criam um namespace, a API com duas réplicas e um PostgreSQL com volume persistente. A API fica disponível internamente no cluster; use kubectl port-forward para acessá-la localmente.

  1. Inicie um cluster local. Exemplo para Windows Pro com Hyper-V:

    minikube start --driver=hyperv --hyperv-virtual-switch="Default Switch" --disk-size=10g --cpus=2 --memory=4096
    kubectl get nodes

    Aguarde o nó ficar Ready. O tamanho do disco deve caber no espaço disponível no computador.

  2. Gere o JAR e construa a imagem diretamente no Minikube (não requer Docker Desktop):

    .\mvnw.cmd package
    minikube image build --tag api-rest-java:1.0 .

    Para Kind, construa a imagem com Docker e carregue-a no cluster:

    docker build -t api-rest-java:1.0 .
    kind load docker-image api-rest-java:1.0

    Em outros clusters, publique a imagem em um registry acessível pelos nós e atualize image em k8s/api.yaml.

  3. Crie o namespace e o Secret do banco. Substitua os valores de exemplo, principalmente a senha:

    kubectl apply -f k8s/namespace.yaml
    kubectl create secret generic postgres-credentials -n api-rest `
      --from-literal=database=db123 `
      --from-literal=username=user123 `
      --from-literal=password=password123

    O Secret não é armazenado nos manifests. Para produção, use uma senha forte e considere um gerenciador de Secrets; os valores em Secrets do Kubernetes não são criptografados por padrão no etcd.

  4. Aplique os manifests e acompanhe os Pods:

    kubectl apply -f k8s/
    kubectl get pods -n api-rest
  5. Quando os Pods estiverem prontos, encaminhe a porta e acesse a API:

    kubectl port-forward -n api-rest service/public-api 8080:8080

    A API estará em http://localhost:8080/v1/users. O PVC do PostgreSQL requer uma StorageClass padrão no cluster. Se alterar o nome do banco no Secret, atualize também SPRING_DATASOURCE_URL em k8s/api.yaml.

About

API REST feita com Java e Spring que faz um CRUD básico, conternizei ela com Docker e conectei ela com um banco de dados PostgreSQL conternizado via redes do Docker Compose.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages