GraphQL en Kotlin: Reseña de bibliotecas y herramientas para desarrollo del lado del servidor

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 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

Recommendations