Introducción a GraphQL API en Java
\n\nGraphQL es un lenguaje de consultas para API que permite a los clientes solicitar únicamente los datos que realmente necesitan. A diferencia de REST, donde la estructura de la respuesta es fija, GraphQL permite formar respuestas de manera flexible, lo que reduce significativamente el volumen de datos transferidos y acelera el desarrollo.
\n\nEn este tutorial, analizaremos en la práctica cómo crear una GraphQL API con Java utilizando la librería graphql-java y el framework Spring Boot. Aprenderá a configurar el esquema, escribir resolvers y ejecutar consultas.
El artículo será útil para desarrolladores Java que deseen dominar un enfoque moderno para construir API y mejorar la interacción entre cliente y servidor.
\n\n1. Configuración del proyecto y dependencias
\n\nPara empezar, crearemos un nuevo proyecto Spring Boot. La forma más cómoda es usar Spring Initializr. Agregaremos las siguientes dependencias:
\n\n- \n
- Spring Web — para ejecutar el servidor web \n
- Spring Boot DevTools — para acelerar el desarrollo \n
- Lombok — para reducir el código repetitivo \n
Después de crear el proyecto, agregue la librería principal de GraphQL en 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\nTambién necesitará la librería para trabajar con la herramienta GraphiQL (interfaz web para probar 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\nDespués de agregar las dependencias, actualice el proyecto y ejecútelo. Por defecto, GraphiQL estará disponible en la dirección http://localhost:8080/graphiql.
2. Creación del modelo de datos y esquema GraphQL
\n\nPara la demostración, crearemos un modelo simple Book (libro). Definamos una clase con los campos id, title, author y 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\nAhora es necesario definir el esquema GraphQL. Cree un archivo schema.graphqls en la carpeta 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\nEl esquema describe dos consultas: obtener todos los libros y obtener un libro por identificador. El tipo Book contiene cuatro campos.
\n\nPara procesar las consultas, crearemos un servicio que almacene los datos en memoria (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 y Paz", "León Tolstói", 1225));\n books.add(new Book("2", "Crimen y Castigo", "Fiódor Dostoyevski", 671));\n books.add(new Book("3", "El Maestro y Margarita", "Mijaíl Bulgákov", 480));\n }\n\n public List<Book> getAllBooks() {\n return books;\n }\n\n public Book getBookById(String id) {\n Optional<Boo