🚀 1. Configuração Inicial do Projeto Spring Boot
- #Java
- #Cloud
- #POO
- Criação do Projeto Spring Boot Use o Spring Initializr para gerar o projeto. Se preferir usar o terminal ou IDE, pode gerar um projeto com as dependências:
- Spring Web
- Spring Data JPA
- H2 Database (para exemplo rápido) ou qualquer banco de dados relacional
- Lombok
- Estrutura do Projeto: O projeto Spring Boot já cria a estrutura básica, mas vejamos um exemplo de como ela pode ser organizada.
🏗️ 2. Estrutura do Projeto
- src
- main
- java
- com.example.demo
- controller (Controladores de API)
- model (Modelos de dados)
- repository (Repositórios JPA)
- service (Serviços de lógica de negócio)
- DemoApplication.java (Classe principal)
📊 3. Exemplo de Modelo (Model)
Aqui, usaremos o Lombok para reduzir o código boilerplate e JPA para mapear a classe ao banco de dados.
package com.example.demo.model;
import lombok.Data;
import javax.persistence.*;
@Data
@Entity
public class Product {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private Double price;
private Integer quantity;
}
📁 4. Repositório JPA
O repositório será responsável por acessar os dados no banco de dados.
package com.example.demo.repository;
import com.example.demo.model.Product;
import org.springframework.data.jpa.repository.JpaRepository;
public interface ProductRepository extends JpaRepository<Product, Long> {
}
🧑💻 5. Serviço (Service)
O serviço contém a lógica de negócio. Ele interage com o repositório.
package com.example.demo.service;
import com.example.demo.model.Product;
import com.example.demo.repository.ProductRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class ProductService {
@Autowired
private ProductRepository productRepository;
public List<Product> getAllProducts() {
return productRepository.findAll();
}
public Product getProductById(Long id) {
return productRepository.findById(id).orElse(null);
}
public Product createProduct(Product product) {
return productRepository.save(product);
}
public Product updateProduct(Long id, Product product) {
product.setId(id);
return productRepository.save(product);
}
public void deleteProduct(Long id) {
productRepository.deleteById(id);
}
}
🛠️ 6. Controlador (Controller)
O controlador expõe as endpoints da API REST.
package com.example.demo.controller;
import com.example.demo.model.Product;
import com.example.demo.service.ProductService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/api/products")
public class ProductController {
@Autowired
private ProductService productService;
@GetMapping
public List<Product> getAllProducts() {
return productService.getAllProducts();
}
@GetMapping("/{id}")
public Product getProductById(@PathVariable Long id) {
return productService.getProductById(id);
}
@PostMapping
public Product createProduct(@RequestBody Product product) {
return productService.createProduct(product);
}
@PutMapping("/{id}")
public Product updateProduct(@PathVariable Long id, @RequestBody Product product) {
return productService.updateProduct(id, product);
}
@DeleteMapping("/{id}")
public void deleteProduct(@PathVariable Long id) {
productService.deleteProduct(id);
}
}
🧪 7. Testes e Verificação
Você pode agora testar a API utilizando ferramentas como Postman ou cURL.
- GET /api/products: Retorna todos os produtos.
- GET /api/products/{id}: Retorna um produto pelo ID.
- POST /api/products: Cria um novo produto.
- PUT /api/products/{id}: Atualiza um produto.
- DELETE /api/products/{id}: Deleta um produto.
🔐 8. Expansão para Segurança e Autenticação
A API pode ser facilmente expandida para incluir segurança. Aqui estão algumas possibilidades:
- Autenticação JWT (JSON Web Token) para proteger as rotas.
- Spring Security para configurar roles e permissões de acesso.
🚀 Exemplo de Segurança com JWT:
- Adicione a dependência do Spring Security no
pom.xml
:
xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
- Crie a configuração de segurança, integrando JWT com Spring Security.
☁️ 9. Deploy em Cloud
- AWS (Amazon Web Services), Google Cloud ou Heroku são plataformas populares para deploy.
- Docker: Contêineres podem ser usados para empacotar a aplicação para deploy em qualquer ambiente (Cloud ou Local).
🚀 Deploy no Heroku (Exemplo):
- Adicione um
Procfile
no diretório raiz com o seguinte conteúdo:
bash
web: java -jar target/demo-0.0.1-SNAPSHOT.jar
- Crie um arquivo
application.properties
com a configuração do banco de dados remoto, caso necessário. - Com o Heroku CLI:
- Faça login:
heroku login
- Crie um novo aplicativo:
heroku create
- Suba o código:
git push heroku main
🧑💻 Conclusão:
Com Spring Boot, JPA e Lombok, você tem uma base sólida para construir uma API RESTful com funcionalidades CRUD (Criar, Ler, Atualizar, Deletar). Você pode facilmente expandir essa base para incluir autenticação, segurança, deploy em Cloud, e muito mais. Com o uso de ferramentas como JWT, Spring Security, e Docker, seu sistema pode se tornar robusto e escalável para ambientes de produção.