En el panorama en constante evolución del desarrollo web, GraphQL ha surgido como una alternativa poderosa a las API REST tradicionales, ofreciendo un enfoque más flexible y eficiente para la obtención de datos. Si estás ansioso por explorar esta tecnología creativa e integrarla perfectamente con Spring, has llegado al lugar correcto.
Bienvenido a nuestro completo tutorial de GraphQL, donde nos embarcaremos en un viaje para desmitificar los conceptos de GraphQL y guiarte a través del proceso de comenzar con Spring para GraphQL.
¿Qué es Spring GraphQL y sus características clave?
Spring GraphQL es una extensión del popular Spring Framework que permite a los desarrolladores crear API basadas en GraphQL sin problemas. Combina el poder de la facilidad de desarrollo de Spring Boot con la flexibilidad y eficiencia de GraphQL, lo que lo convierte en una opción ideal para desarrollar API modernas.
Las características clave de Spring GraphQL incluyen:
- Desarrollo schema-first: Con Spring GraphQL, los desarrolladores pueden comenzar definiendo el esquema de la API utilizando el lenguaje de definición de esquemas GraphQL (SDL). Este enfoque schema-first garantiza que el diseño de la API sea claro y esté bien definido desde el principio, lo que promueve un proceso de desarrollo más organizado y estructurado.
- Obtención de datos con resolvers: Spring GraphQL simplifica la obtención de datos al proporcionar resolvers. Los resolvers son responsables de obtener los datos necesarios para cada campo en una consulta GraphQL. Los desarrolladores pueden implementar resolvers para recuperar datos de diversas fuentes, como bases de datos, API externas o cualquier otro repositorio de datos, lo que permite una mayor flexibilidad y reutilización.
- Integración con el ecosistema Spring: Como parte de la familia Spring, Spring GraphQL se integra perfectamente con otros componentes de Spring, como Spring Data JPA para interacciones con bases de datos y Spring Security para autenticación y autorización. Esta estrecha integración garantiza una experiencia de desarrollo fluida y cohesiva.
- Actualizaciones en tiempo real con suscripciones: Spring GraphQL admite actualizaciones de datos en tiempo real a través de suscripciones GraphQL. Las suscripciones permiten a los clientes suscribirse a eventos específicos y recibir actualizaciones de datos en tiempo real a medida que ocurren esos eventos. Esta característica es particularmente útil para crear aplicaciones en tiempo real, como sistemas de chat o fuentes de datos en vivo.
¿Cómo configurar tu entorno?
Antes de comenzar tu viaje con GraphQL y Spring, asegúrate de que tu configuración esté lista. Aquí te mostramos cómo puedes preparar tu entorno para construir un proyecto Spring Boot con GraphQL:
Requisitos previos:
- JDK 17: Ten JDK 17 instalado en tu sistema. Puedes descargarlo desde Oracle u OpenJDK.
- Comprensión básica de Spring Boot: Conoce los conceptos básicos de Spring Boot. Te ayudará a medida que combines GraphQL.
Creación de un proyecto Spring Boot:
Spring Initializr: Ve a start.spring.io, tu punto de partida para los proyectos Spring Boot.
Primero, proporciona los detalles de configuración del proyecto, como nombrar tu proyecto, especificar un nombre de grupo en formato de dominio inverso (por ejemplo, com.example) y designar un nombre de paquete para el código Java de tu aplicación. También puedes incluir metadatos como una descripción y una versión si es necesario.
Segundo, agrega las dependencias necesarias. En la sección Dependencias, selecciona "Spring Web" para habilitar el soporte para la creación de aplicaciones web con Spring. Del mismo modo, marca "Spring GraphQL" para habilitar las funciones relacionadas con GraphQL. Una vez que hayas configurado tu proyecto y elegido las dependencias, haz clic en el botón "Generar" para continuar.
Importación de tu proyecto en tu IDE:
Primero, extrae el contenido del archivo ZIP para acceder a su contenido. Segundo, abre tu Entorno de Desarrollo Integrado (IDE), como IntelliJ IDEA. A continuación, importa el proyecto que extrajiste anteriormente.
¡Eso es todo! Tu entorno está configurado, has creado un proyecto Spring Boot y tienes GraphQL a bordo. Tu IDE es tu campo de juego para las aventuras de codificación.
¿Cómo configurar la capa de datos?
En esta sección, crearemos un ejemplo simple, como una cafetería, para demostrar cómo GraphQL puede mejorar la recuperación y la gestión de datos.
Introducción al ejemplo:
Imagina que estás desarrollando una API para una cafetería para administrar su menú y pedidos. Para ilustrar esto, definiremos modelos de datos básicos para artículos de café y clientes, y configuraremos un servicio para manejar estos datos.
Definición de modelos de datos básicos:
Comencemos creando dos modelos de datos simples: Coffee y Size. Estos modelos se implementarán como clases Java, cada una con atributos que representan información relevante.
Deberás crear dos clases en dos archivos diferentes y en cada clase, deberás agregar constructores, getters y setters para los atributos.
public class Coffee {
private int id;
private String name;
private Size size;
// Constructors, getters, setters
}
public class Size {
private int id;
private String name;
// Constructors, getters, setters
}
Después de crear y agregar estas clases, debes asegurarte de que estén ubicadas en el paquete apropiado dentro de tu proyecto Spring Boot. La estructura del paquete debe reflejar el nombre del paquete que proporcionaste al generar el proyecto en Spring Initializr.
Aquí te mostramos cómo puedes agregar setters, getters y constructores para la clase Coffee.java.

Configuración de la gestión de datos:
Crearemos una clase simple CoffeeService para que sirva como un repositorio de datos en memoria y administre los datos del café. Para demostrarlo, poblaremos este repositorio con algunos artículos de café de muestra.
import java.util.ArrayList;
import java.util.List;
@Component
public class CoffeeService {
private final List<Coffee> coffees = new ArrayList<>();
@PostConstruct
public void init() {
Size smallSize = new Size(1, "Small");
Size mediumSize = new Size(2, "Medium");
Size largeSize = new Size(3, "Large");
coffees.add(new Coffee(1, "Espresso", smallSize));
coffees.add(new Coffee(2, "Latte", mediumSize));
coffees.add(new Coffee(3, "Cappuccino", largeSize));
}
public List<Coffee> getAllCoffees() {
return coffees;
}
public Coffee getCoffeeById(int id) {
return coffees.stream()
.filter(coffee -> coffee.getId() == id)
.findFirst()
.orElse(null);
}
}
La clase CoffeeService administra los datos relacionados con el café, actuando como un sistema de almacenamiento y recuperación. Inicializa los datos de café de muestra al momento de la creación, ofreciendo métodos para recuperar todos los cafés o uno específico por ID. Esta abstracción agiliza el acceso y la manipulación de datos, preparando los datos para la interacción dentro del esquema GraphQL.

¿Cómo crear el esquema GraphQL?
Crea un archivo llamado schema.graphqls en la carpeta src/main/resources y define el esquema GraphQL utilizando el lenguaje de definición de esquemas (SDL).
type Query {
getAllCoffees: [Coffee!]!
getCoffeeById(id: Int!): Coffee
}
type Coffee {
id: Int!
name: String!
size: Size!
}
type Size {
id: Int!
name: String!
}
Aquí te mostramos cómo puedes hacerlo.

Crear buscadores de datos:
El código define una clase llamada CoffeeDataFetcher responsable de recuperar datos para consultas GraphQL. Está anotada con @Component para ser administrada por Spring. El buscador getAllCoffees() recupera una lista de artículos de café utilizando el método coffeeService.getAllCoffees(). El buscador getCoffeeById() extrae un ID de los argumentos de la consulta y lo utiliza para buscar un artículo de café específico del CoffeeService.
import graphql.schema.DataFetcher;
import graphql.schema.DataFetchingEnvironment;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class CoffeeDataFetcher {
@Autowired
private CoffeeService coffeeService;
public DataFetcher<List<Coffee>> getAllCoffees() {
return environment -> coffeeService.getAllCoffees();
}
public DataFetcher<Coffee> getCoffeeById() {
return environment -> {
int id = environment.getArgument("id");
return coffeeService.getCoffeeById(id);
};
}
}
Aquí te mostramos cómo puedes hacerlo.

Crear controlador GraphQL:
En Spring, los controladores GraphQL proporcionan puntos finales para interactuar con tu esquema GraphQL. Estos controladores manejan las consultas entrantes y devuelven los datos correspondientes.
import graphql.GraphQL;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class GraphQLController {
@Autowired
private GraphQL graphQL;
@PostMapping("/graphql")
public Map<String, Object> executeQuery(@RequestBody String query) {
ExecutionResult executionResult = graphQL.execute(query);
return executionResult.toSpecification();
}
}
Este controlador manejará las consultas GraphQL entrantes e interactuará con tu esquema GraphQL. Proporciona un punto final RESTful en /graphql que acepta solicitudes POST con la consulta GraphQL en el cuerpo de la solicitud. Luego, el controlador utiliza la instancia GraphQL para ejecutar la consulta y devuelve el resultado de la ejecución como un mapa.
Spring GraphQL es un marco de trabajo poderoso que permite a los desarrolladores crear API eficientes utilizando el lenguaje de consulta GraphQL. A diferencia de las API REST tradicionales, donde múltiples puntos finales dictan la recuperación de datos, GraphQL permite a los clientes especificar exactamente qué datos necesitan en una sola solicitud, lo que reduce la sobre-obtención o la sub-obtención de datos. Spring GraphQL aprovecha las fortalezas del ecosistema Spring, combinando la simplicidad de Spring Boot con la flexibilidad de GraphQL.
El proceso implica definir tus modelos de datos, crear una capa de servicio para administrar los datos y establecer un esquema con tipos y consultas. El enfoque schema-first de Spring GraphQL garantiza un diseño claro y un proceso de desarrollo estructurado. La obtención de datos se simplifica a través de resolvers y las actualizaciones en tiempo real se facilitan mediante suscripciones.
Herramientas de prueba de GraphQL:
GraphQL se ha convertido en una forma popular de crear API, y probarlas es crucial para garantizar que funcionen correctamente. Las herramientas de prueba ayudan a los desarrolladores a verificar si sus API GraphQL funcionan según lo previsto.
Una de estas herramientas es Apidog, que ofrece una gama de funciones para facilitar las pruebas de API. Veamos qué puede hacer Apidog y mencionemos algunas otras herramientas de prueba útiles para GraphQL.

Apidog:
Apidog es un conjunto de herramientas versátil que cubre todo el proceso de creación de API. Es como una navaja suiza para las API, que ayuda con el diseño, las pruebas y más. Esto es lo que ofrece Apidog:
Lo que Apidog ofrece para las pruebas de GraphQL:
Apidog también funciona bien para probar API GraphQL. Tiene características como:
- Soporte para GraphQL: Apidog puede probar y depurar API GraphQL.
- Automatización: Puede automatizar tareas y mantener sincronizadas las definiciones de tu API.
- Integración de bases de datos: Apidog puede conectarse a bases de datos para realizar mejores pruebas.
Conclusión
A medida que las API siguen evolucionando, la combinación de GraphQL, Spring GraphQL y herramientas como Apidog remodela la forma en que se crean las API. Esta combinación brinda a los desarrolladores más control y eficiencia, lo que resulta en API sólidas, adaptables y de alto rendimiento.