Introdução ao GraphQL API com Java
GraphQL é uma linguagem de consulta para APIs que permite aos clientes solicitarem apenas os dados de que realmente precisam. Ao contrário do REST, onde cada endpoint retorna uma estrutura de dados fixa, o GraphQL oferece flexibilidade e reduz o número de requisições. Neste tutorial, criaremos uma API GraphQL completa em Java usando Spring Boot e a biblioteca graphql-java. Você aprenderá como configurar o projeto, definir o schema, escrever resolvers e processar queries e mutations. Todos os exemplos de código estão prontos para execução.
1. Configuração do projeto e dependências
Para começar, criaremos um novo projeto Spring Boot. Usaremos Maven, mas você pode adaptar o exemplo para Gradle. Adicione as seguintes dependências no pom.xml:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId></dependency><dependency> <groupId>com.graphql-java</groupId> <artifactId>graphql-java</artifactId> <version>21.0</version></dependency><dependency> <groupId>com.graphql-java</groupId> <artifactId>graphql-java-spring-boot-starter-webmvc</artifactId> <version>2021-06-28T00-00-00-6e3b7b2</version></dependency>Após adicionar as dependências, crie a classe principal da aplicação:
@SpringBootApplicationpublic class GraphqlApplication { public static void main(String[] args) { SpringApplication.run(GraphqlApplication.class, args); }}Agora, configure o endpoint do GraphQL. Crie o arquivo application.yml na pasta resources:
graphql: servlet: mapping: /graphql enabled: true cors-enabled: truePronto! A estrutura básica do projeto está funcionando. A seguir, vamos definir o schema.
2. Definição do schema GraphQL
O schema é o núcleo de uma API GraphQL. Ele descreve os tipos de dados, queries e mutations. Crie o 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 deleteBook(id: ID!): Boolean}Aqui, definimos:
- Book — um objeto com os campos id, title, author e year.
- Query — pontos de entrada para leitura de dados (lista de livros e busca por ID).
- Mutation — operações de modificação de dados (adicionar e remover livro).
Agora, precisamos carregar este schema na aplicação. Crie uma classe de configuração:
import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import graphql.GraphQL;import graphql.schema.GraphQLSchema;import graphql.schema.idl.RuntimeWiring;import graphql.schema.idl.SchemaGenerator;import graphql.schema.idl.SchemaParser;import graphql.schema.idl.TypeDefinitionRegistry;
import java.io.File;import java.io.IOException;
@Configurationpublic class GraphqlConfig {
@Bean public GraphQL graphQL() throws IOException { File schemaFile = new File("src/main/resources/schema.graphqls"); TypeDefinitionRegistry typeRegistry = new SchemaParser().parse(schemaFile); RuntimeWiring wiring = buildWiring(); GraphQLSchema schema = new SchemaGenerator().makeExecutableSchema(typeRegistry, wiring); return GraphQL.newGraphQL(schema).build(); }
private RuntimeWiring buildWiring() { return RuntimeWiring.newRuntimeWiring() .type(
```