Introducción a GraphQL API en Java
GraphQL es un lenguaje de consulta moderno para API que permite a los clientes solicitar solo los datos que realmente necesitan. A diferencia de REST, donde la estructura de la respuesta es fija, GraphQL ofrece flexibilidad y eficiencia. En este tutorial paso a paso crearemos una API GraphQL completa en Java utilizando la popular biblioteca graphql-java y Spring Boot. Aprenderás a configurar el servidor, definir el esquema, escribir resolvers y ejecutar consultas. Todos los ejemplos de código están listos para ejecutarse.
Qué aprenderás
- Cómo configurar un proyecto Spring Boot para GraphQL
- Cómo definir un esquema GraphQL (tipos, consultas, mutaciones)
- Cómo escribir resolvers en Java
- Cómo ejecutar consultas query y mutation
1. Configuración del proyecto y dependencias
Para empezar, crearemos un proyecto Spring Boot con Maven. Agregaremos las dependencias necesarias en pom.xml:
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <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></dependencies>Estas bibliotecas proporcionan la integración de GraphQL con Spring Boot y facilitan el trabajo con esquemas. Después de agregar las dependencias, actualice el proyecto.
Estructura del proyecto
Nuestro proyecto contendrá los siguientes componentes principales:
- Esquema GraphQL (archivo
schema.graphqls) - Modelos de datos (Java POJO)
- Resolvers (manejadores de consultas)
- Controlador para pruebas
2. Definición del esquema GraphQL
Cree el archivo src/main/resources/schema.graphqls. En él describiremos los tipos de datos y las operaciones disponibles. Como ejemplo, tomaremos el modelo "Libro":
type Book { id: ID! title: String! author: String! year: Int}
type Query { getBook(id: ID!): Book getAllBooks: [Book]}
type Mutation { addBook(title: String!, author: String!, year: Int): Book}Aquí Book es un tipo de objeto con campos obligatorios (!). Query define los puntos de entrada para la lectura de datos, y Mutation para la modificación. Tenga en cuenta: en GraphQL, las mutaciones se utilizan para crear, actualizar y eliminar datos.
3. Creación de modelos Java y resolvers
Modelo Book
Crearemos una clase POJO simple Book.java:
public class Book { private String id; private String title; private String author; private int year;
public Book(String id, String title, String author, int year) { this.id = id; this.title = title; this.author = author; this.year = year; }
// getters y setters public String getId() { return id; } public String getTitle() { return title; } public String getAuthor() { return author; } public int getYear() { return year; }}Resolver para Query
Los resolvers vinculan el esquema con los datos. Crearemos la clase QueryResolver.java:
import com.coxautodev.graphql.tools.GraphQLQueryResolver;import org.springframework.stereotype.Component;import java.util.*;
@Componentpublic class QueryResolver implements GraphQLQueryResolver {
private final List<Book