Introducción a GraphQL API con Kotlin
GraphQL es un lenguaje de consultas para API, desarrollado por Facebook, que permite a los clientes solicitar solo los datos que realmente necesitan. A diferencia de REST, donde cada endpoint devuelve una estructura de datos fija, GraphQL brinda flexibilidad y control. Kotlin, al ser un lenguaje moderno de tipado estático para la JVM, es ideal para crear este tipo de API gracias a su concisión y seguridad. En este tutorial, crearemos paso a paso un servidor GraphQL simple en Kotlin utilizando la librería graphql-kotlin y Spring Boot.
Al final del artículo, aprenderás a:
- Configurar un proyecto Kotlin con Gradle
- Definir un esquema GraphQL (tipos, consultas, mutaciones)
- Implementar resolvers para procesar consultas
- Probar la API a través de GraphQL Playground
Paso 1: Configuración del proyecto y dependencias
Para comenzar, crearemos un nuevo proyecto Kotlin usando Gradle. Usaremos Spring Boot para simplificar la configuración y graphql-kotlin-spring-server para la integración de GraphQL.
Creación del proyecto base
Cree un directorio para el proyecto y el archivo build.gradle.kts:
plugins { id("org.springframework.boot") version "3.2.0" id("io.spring.dependency-management") version "1.1.4" kotlin("jvm") version "1.9.21" kotlin("plugin.spring") version "1.9.21"}
group = "com.example"version = "0.0.1-SNAPSHOT"
java { sourceCompatibility = JavaVersion.VERSION_17}
repositories { mavenCentral()}
dependencies { implementation("org.springframework.boot:spring-boot-starter-web") implementation("com.expediagroup:graphql-kotlin-spring-server:7.0.1") implementation("com.expediagroup:graphql-kotlin-schema-generator:7.0.1") testImplementation("org.springframework.boot:spring-boot-starter-test")}
tasks.withType { kotlinOptions { freeCompilerArgs += "-Xjsr305=strict" jvmTarget = "17" }} Luego, cree la clase principal de la aplicación en src/main/kotlin/com/example/Application.kt:
package com.example
import org.springframework.boot.autoconfigure.SpringBootApplicationimport org.springframework.boot.runApplication
@SpringBootApplicationclass Application
fun main(args: Array<String>) { runApplication<Application>(*args)}Paso 2: Definición del modelo de datos y esquema GraphQL
GraphQL utiliza tipado estricto. Definamos un modelo de datos simple: un libro (Book) y un autor (Author).
Creación de las clases de datos
Cree el archivo src/main/kotlin/com/example/model/Book.kt:
package com.example.model
data class Book( val id: String, val title: String, val author: Author, val year: Int)
data class Author( val id: String, val name: String, val nationality: String)La librería graphql-kotlin generará automáticamente los tipos GraphQL basados en estas data classes. Cada campo se convertirá en un campo del esquema.
Resolvers para consultas
Ahora crearemos un servicio que proporcionará los datos. Cree src/main/kotlin/com/example/service/BookService.kt:
package com.example.service
import com.example.model.Authorimport com.example.model.Bookimport org.springframework.stereotype.Service
@Serviceclass BookService { private val books = mutableListOf( Book("1", "Guerra y paz", Author("a1", "León Tolstói", "Rusia"), 1869), Book("2", "Crimen y castigo", Author("a2", "Fiódor Dostoyevski", "Rusia"), 1866), Book("3", "1984", Author("a3", "George Orwell", "Reino Unido"), 1949) )
fun getAllBooks(): List<Book> = books fun getBookById(id: String): Book? = books.find { it