GraphQL en Kotlin: Reseña completa de bibliotecas y herramientas
GraphQL es un lenguaje de consulta para API y un entorno de ejecución para ejecutar esas consultas con tus datos existentes. Proporciona a los clientes la capacidad de solicitar exactamente los datos que necesitan, lo que lo convierte en una poderosa alternativa a REST. En el ecosistema de Kotlin, existen varias bibliotecas maduras para crear la parte del servidor de GraphQL. En este artículo, analizaremos en detalle las principales herramientas, su sintaxis y ejemplos de uso.
¿Por qué Kotlin para GraphQL?
Kotlin, al ser un lenguaje de tipado estático que se ejecuta en la JVM, es ideal para construir esquemas GraphQL con seguridad de tipos. El compilador de Kotlin ayuda a evitar errores en la etapa de escritura del código, y su sintaxis expresiva hace que el código sea limpio y conciso. Las principales bibliotecas para trabajar con GraphQL en Kotlin incluyen:
- graphql-kotlin (de Expedia Group) — la biblioteca más popular, estrechamente integrada con Spring Boot.
- KGraphQL — una alternativa con énfasis en una configuración simple y una API minimalista.
- Apollo Kotlin — una biblioteca cliente para Android y KMP, pero que también ofrece capacidades del lado del servidor.
Biblioteca graphql-kotlin
graphql-kotlin es un conjunto de bibliotecas para construir servidores GraphQL en Kotlin. El enfoque principal es el uso de anotaciones y clases de datos para la generación automática del esquema.
Instalación
Añade la dependencia en build.gradle.kts:
dependencies { implementation("com.expediagroup:graphql-kotlin-spring-server:7.0.0") implementation("com.expediagroup:graphql-kotlin-schema-generator:7.0.0")}Ejemplo: Consulta simple
Definimos una clase de datos y un resolver:
import com.expediagroup.graphql.server.operations.Query
data class User(val id: Int, val name: String, val email: String)
class UserQuery : Query { fun getUser(id: Int): User { // Simulación de obtención desde la BD return User(id = id, name = "Alice", email = "alice@example.com") }}graphql-kotlin generará automáticamente el esquema. Ahora el cliente puede ejecutar la consulta:
query { getUser(id: 1) { name email }}La respuesta contendrá solo los campos solicitados:
{ "data": { "getUser": { "name": "Alice", "email": "alice@example.com" } }}Mutaciones (modificación de datos)
Para las mutaciones se utiliza la interfaz Mutation:
import com.expediagroup.graphql.server.operations.Mutation
class UserMutation : Mutation { fun createUser(name: String, email: String): User { // Lógica de creación de usuario return User(id = 2, name = name, email = email) }}La consulta correspondiente:
mutation { createUser(name: "Bob", email: "bob@example.com") { id name }}Biblioteca KGraphQL
KGraphQL ofrece un enfoque más orientado a DSL, sin necesidad de anotaciones. El esquema se construye mediante programación.
Instalación
dependencies { implementation("com.apurebase:kgraphql:0.18.0") implementation("com.apurebase:kgraphql-ktor:0.18.0") // para Ktor}Ejemplo: Definición del esquema
import com.apurebase.kgraphql.schema.dsl.SchemaBuilder
val schema = SchemaBuilder { query("hello") { resolver { -> "Hello, World!" } }
query("user") { resolver { id: Int -> User(id = id, name = "Charlie", email = "charlie@example.com") } }
mutation("createUser") { resolver { name: String, email: String -> User(id = 3, name = name, email = email) } }}Luego se conecta al framework web
También en la biblioteca
Trabajo con Markdown en Go (Golang): bibliotecas, análisis y conversión
Trabajo con fechas en Kotlin: bibliotecas y herramientas para el desarrollo
Generador de códigos QR en C# (.NET) con la librería QRCoder
Awilix para TypeScript: guía completa del contenedor DI