Introdução à GraphQL API em Java
\n\nGraphQL é uma linguagem de consulta para APIs que permite aos clientes solicitar apenas os dados de que realmente precisam. Ao contrário do REST, onde a estrutura da resposta é fixa, o GraphQL permite formar respostas de forma flexível, reduzindo significativamente o volume de dados transmitidos e acelerando o desenvolvimento.
\n\nNeste tutorial, vamos explorar na prática como criar uma GraphQL API com Java usando a biblioteca graphql-java e o framework Spring Boot. Você aprenderá a configurar o esquema, escrever resolvers e executar consultas.
O artigo será útil para desenvolvedores Java que desejam dominar uma abordagem moderna para construir APIs e melhorar a interação entre cliente e servidor.
\n\n1. Configuração do projeto e dependências
\n\nPara começar, vamos criar um novo projeto Spring Boot. A maneira mais conveniente é usar o Spring Initializr. Adicione as seguintes dependências:
\n\n- \n
- Spring Web — para executar o servidor web \n
- Spring Boot DevTools — para acelerar o desenvolvimento \n
- Lombok — para reduzir o código boilerplate \n
Após criar o projeto, adicione a biblioteca principal do GraphQL no pom.xml:
<dependency>\n <groupId>com.graphql-java</groupId>\n <artifactId>graphql-java-spring-boot-starter-webmvc</artifactId>\n <version>2021-06-30T00-00-00-1e4b5e5</version>\n</dependency>\n\nVocê também precisará da biblioteca para trabalhar com a ferramenta GraphiQL (interface web para testar consultas):
\n\n<dependency>\n <groupId>com.graphql-java</groupId>\n <artifactId>graphiql-spring-boot-starter</artifactId>\n <version>5.0.2</version>\n</dependency>\n\nApós adicionar as dependências, atualize o projeto e execute-o. Por padrão, o GraphiQL estará disponível no endereço http://localhost:8080/graphiql.
2. Criação do modelo de dados e esquema GraphQL
\n\nPara demonstração, vamos criar um modelo simples de Book (livro). Defina a classe com os campos id, title, author e pages.
import lombok.AllArgsConstructor;\nimport lombok.Data;\nimport lombok.NoArgsConstructor;\n\n@Data\n@NoArgsConstructor\n@AllArgsConstructor\npublic class Book {\n private String id;\n private String title;\n private String author;\n private int pages;\n}\n\nAgora é necessário definir o esquema GraphQL. Crie o arquivo schema.graphqls na pasta src/main/resources:
type Query {\n allBooks: [Book]\n bookById(id: String): Book\n}\n\ntype Book {\n id: String\n title: String\n author: String\n pages: Int\n}\n\nO esquema descreve duas consultas: obter todos os livros e obter um livro pelo identificador. O tipo Book contém quatro campos.
\n\nPara processar as consultas, vamos criar um serviço que armazenará os dados em memória (para simplificar):
\n\nimport org.springframework.stereotype.Service;\nimport javax.annotation.PostConstruct;\nimport java.util.ArrayList;\nimport java.util.List;\nimport java.util.Optional;\n\n@Service\npublic class BookService {\n private List<Book> books = new ArrayList<>();\n\n @PostConstruct\n public void init() {\n books.add(new Book("1", "Guerra e Paz", "Lev Tolstói", 1225));\n books.add(new Book("2", "Crime e Castigo", "Fiódor Dostoiévski", 671));\n books.add(new Book("3", "O Mestre e a Margarida", "Mikhail Bulgákov", 480));\n }\n\n public List<Book> getAllBooks() {\n return books;\n }\n\n public Book getBookById(String id) {\n Optional<Boo