GraphQL Java: Guía completa de la biblioteca para crear API en Java

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

GraphQL Java: Potente herramienta para crear API modernas



GraphQL Java es una biblioteca del lado del servidor para el lenguaje Java que permite a los desarrolladores crear API flexibles, eficientes y con seguridad de tipos basadas en la especificación GraphQL. A diferencia de las API REST tradicionales, GraphQL permite al cliente solicitar solo los datos que necesita, lo que reduce significativamente el volumen de información transferida y acelera el funcionamiento de las aplicaciones. Esta biblioteca es la implementación oficial de GraphQL para Java y cuenta con un sólido respaldo de la comunidad.



Características principales y ventajas de GraphQL Java



  • Seguridad de tipos: La tipificación estricta de todos los datos a nivel de esquema evita errores en tiempo de ejecución y simplifica el desarrollo.
  • Flexibilidad de consultas: Los clientes pueden solicitar solo los campos necesarios, objetos anidados e incluso ejecutar múltiples operaciones en una sola consulta.
  • Punto de entrada único: A diferencia de REST con múltiples endpoints, GraphQL utiliza un único endpoint para todas las consultas.
  • Documentación automática: Se genera documentación interactiva basada en el esquema (por ejemplo, con GraphiQL o Playground).
  • Soporte de suscripciones (Subscriptions): Posibilidad de recibir actualizaciones en tiempo real a través de WebSocket.
  • Integración con el ecosistema Java: Se integra fácilmente con Spring Boot, Micronaut, Quarkus y otros frameworks.


Comenzando con GraphQL Java



Para agregar la biblioteca a su proyecto Maven, añada la siguiente dependencia en el archivo pom.xml:



<dependency>    <groupId>com.graphql-java</groupId>    <artifactId>graphql-java</artifactId>    <version>21.3</version></dependency>


Para Gradle, agregue la línea en build.gradle:



implementation 'com.graphql-java:graphql-java:21.3'


Creación del esquema GraphQL



El esquema es la base de cualquier API GraphQL. Define los tipos de datos, las consultas disponibles (Query), las mutaciones (Mutation) y las suscripciones (Subscription). Veamos un ejemplo de esquema para una biblioteca de libros:



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

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

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


Para cargar el esquema en Java, use la clase SchemaParser:



import graphql.schema.idl.SchemaParser;import graphql.schema.idl.TypeDefinitionRegistry;

// Carga del esquema desde un archivoFile schemaFile = new File("src/main/resources/schema.graphqls");TypeDefinitionRegistry typeRegistry = new SchemaParser().parse(schemaFile);


Implementación de Resolvers (DataFetcher)



Los Resolvers (o DataFetcher) son clases que proporcionan datos para cada campo del esquema. Ejemplo de un resolver simple para la consulta bookById:



import graphql.schema.DataFetcher;import graphql.schema.DataFetchingEnvironment;

public class BookDataFetcher implements DataFetcher<Book> { @Override public Book get(DataFetchingEnvironment environment) { String id = environment.getArgument("id"); // Lógica para obtener el libro de la base de datos return bookRepository.findById(id); }}


Luego, vincule el resolver con el campo del esquema:



import graphql.schema.idl.RuntimeWiring;

RuntimeWiring wiring = RuntimeWiring.newRuntimeWiring() .type("Query", builder -> builder.dataFetcher("bookById", new BookDataFetcher())) .type("Mutation", builder -> builder.dataFetcher("addBook", new AddBookDataFetcher())) .build();


Ejecución de consultas



Después de configurar el esquema

Recommendations