Segurança em Aplicações Java
em 16 de Janeiro de 2025
APIs RESTful são amplamente utilizadas para permitir a comunicação entre sistemas de maneira eficiente, escalável e independente de plataforma. O Spring Boot, um dos frameworks mais populares no ecossistema Java, simplifica o desenvolvimento de APIs RESTful, oferecendo ferramentas e convenções que agilizam o processo de criação.
Neste artigo, vamos explorar como criar uma API RESTful básica usando Spring Boot, cobrindo desde a configuração inicial até operações CRUD (Create, Read, Update, Delete).
Configurando o Projeto Spring Boot
Você pode iniciar um projeto Spring Boot de duas maneiras principais:
Spring Initializr (Recomendado):
Spring Web
e Spring Data JPA
.Manual:
pom.xml
ou build.gradle
.pom.xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies>
Criando a Estrutura da API RESTful
Crie uma classe que represente o modelo de dados.
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
@Entity
public class Produto {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String nome;
private Double preco;
// Getters e Setters
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public Double getPreco() {
return preco;
}
public void setPreco(Double preco) {
this.preco = preco;
}
}
Use JpaRepository
para manipular a entidade.
import org.springframework.data.jpa.repository.JpaRepository;
public interface ProdutoRepository extends JpaRepository<Produto, Long> {
}
Implemente as operações REST usando a anotação @RestController
.
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/api/produtos")
public class ProdutoController {
@Autowired
private ProdutoRepository repository;
@GetMapping
public List<Produto> listarTodos() {
return repository.findAll();
}
@GetMapping("/{id}")
public ResponseEntity<Produto> buscarPorId(@PathVariable Long id) {
return repository.findById(id)
.map(ResponseEntity::ok)
.orElse(ResponseEntity.notFound().build());
}
@PostMapping
public Produto criar(@RequestBody Produto produto) {
return repository.save(produto);
}
@PutMapping("/{id}")
public ResponseEntity<Produto> atualizar(@PathVariable Long id, @RequestBody Produto produto) {
return repository.findById(id)
.map(existente -> {
existente.setNome(produto.getNome());
existente.setPreco(produto.getPreco());
Produto atualizado = repository.save(existente);
return ResponseEntity.ok(atualizado);
})
.orElse(ResponseEntity.notFound().build());
}
@DeleteMapping("/{id}")
public ResponseEntity<Void> deletar(@PathVariable Long id) {
return repository.findById(id)
.map(existente -> {
repository.delete(existente);
return ResponseEntity.noContent().build();
})
.orElse(ResponseEntity.notFound().build());
}
}
Testando a API RESTful
/api/produtos
: Lista todos os produtos./api/produtos
: Cria um novo produto. Corpo JSON:
{
"nome": "Notebook",
"preco": 3000.0
}
/api/produtos/{id}
: Atualiza um produto existente./api/produtos/{id}
: Exclui um produto.application.properties
:spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
http://localhost:8080/h2-console
.Boas Práticas
@Valid
e anotações como @NotNull
para validar os campos do modelo.@ControllerAdvice
.Com o Spring Boot, criar APIs RESTful é um processo simples e eficiente. Desde a configuração inicial até a implementação das operações CRUD, o framework oferece tudo o que você precisa para desenvolver APIs robustas e escaláveis. Experimente essas técnicas e leve suas aplicações ao próximo nível!