GraphQL API com Java: tutorial passo a passo para iniciantes

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução ao GraphQL e Java

GraphQL é uma linguagem de consulta moderna para APIs, desenvolvida pelo Facebook. Diferente do REST, onde cada endpoint retorna uma estrutura de dados fixa, o GraphQL permite que o cliente solicite exatamente os campos de que precisa. Isso reduz o volume de dados transmitidos e simplifica o desenvolvimento de interfaces complexas.

Neste tutorial, criaremos uma API GraphQL simples em Java usando Spring Boot e a biblioteca graphql-java. Você aprenderá como configurar o projeto, definir o esquema, implementar resolvers e testar a API. O artigo é voltado para iniciantes, então vamos avançar passo a passo.

Para trabalhar, você precisará de: JDK 11+, Maven ou Gradle, IDE (IntelliJ IDEA, Eclipse) e conhecimentos básicos de Java.



1. Configuração do projeto Spring Boot

Vamos começar criando um novo projeto Spring Boot. A maneira mais fácil é usar o Spring Initializr. Selecione as seguintes dependências:

  • Spring Web
  • Spring Boot DevTools
  • Lombok (opcional, para simplificar o código)

Após gerar o projeto, adicione ao pom.xml (ou build.gradle) a dependência para GraphQL:

<dependency>    <groupId>com.graphql-java</groupId>    <artifactId>graphql-spring-boot-starter</artifactId>    <version>5.0.2</version></dependency><dependency>    <groupId>com.graphql-java</groupId>    <artifactId>graphql-java-tools</artifactId>    <version>5.2.4</version></dependency>

Essas bibliotecas simplificarão a integração do GraphQL com o Spring Boot. Após atualizar as dependências, execute o projeto com o comando mvn spring-boot:run ou através da IDE.



2. Definição do esquema GraphQL

O esquema é a base da API GraphQL. Ele descreve os tipos de dados, consultas (queries) e mutações (mutations). Crie um arquivo schema.graphqls na pasta src/main/resources:

type Book {    id: ID!    title: String!    author: String!    year: Int}

type Query { books: [Book] bookById(id: ID!): Book}

type Mutation { addBook(title: String!, author: String!, year: Int): Book}

Aqui definimos o tipo Book com os campos obrigatórios id, title, author e o campo opcional year. Query contém duas consultas: obter todos os livros e obter um livro por ID. Mutation permite adicionar novos livros.

Observe o ponto de exclamação — ele indica um campo obrigatório (non-null).



3. Implementação dos resolvers

Resolvers são classes Java que conectam o esquema aos dados. Vamos criar a classe Book como modelo de dados:

import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;

@Data@NoArgsConstructor@AllArgsConstructorpublic class Book { private String id; private String title; private String author; private Integer year;}

Agora, criaremos um serviço para armazenar os livros (em um projeto real, aqui haveria uma conexão com o banco de dados):

import org.springframework.stereotype.Service;import javax.annotation.PostConstruct;import java.util.ArrayList;import java.util.List;import java.util.Optional;import java.util.UUID;

@Servicepublic class BookService { private List<Book> books = new ArrayList<>();

@PostConstruct public void init() { books.add(new Book("1", "Guerra e Paz", "Liev Tolstói", 1869)); books.add(new Book("2", "Crime e Castigo", "Fiódor Dostoiévski", 1866)); }

public List<Book> getAllBooks() { return books; }

public Optional<Book> getBookById(String id) { return books.str

Blogs

Book Recommendations