GraphQL API con Kotlin: tutorial paso a paso para principiantes

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

Introducción: Por qué GraphQL y Kotlin son la pareja ideal para una API moderna

El desarrollo web moderno requiere APIs flexibles y eficientes. REST, que durante mucho tiempo fue el estándar, a menudo conduce al problema de over-fetching (cuando el servidor envía más datos de los necesarios) o under-fetching (cuando se necesitan múltiples solicitudes para obtener información completa). GraphQL resuelve estos problemas permitiendo al cliente solicitar solo los datos necesarios en una sola consulta.

Kotlin, por su parte, es un lenguaje moderno, conciso y type-safe, ideal para crear servicios backend robustos. Gracias a la librería graphql-kotlin de Expedia Group, crear una API GraphQL en Kotlin se vuelve simple e intuitivo. En este tutorial, crearemos paso a paso una API GraphQL completa para gestionar una lista de libros.

Qué aprenderás:

  • Cómo configurar un proyecto en Spring Boot con soporte para GraphQL.
  • Cómo definir el esquema GraphQL usando clases de Kotlin.
  • Cómo implementar Queries y Mutations.
  • Cómo probar la API a través de la IDE GraphiQL integrada.


Paso 1: Configuración del proyecto y dependencias

Para empezar, crearemos un nuevo proyecto Spring Boot. Usaremos Gradle (Kotlin DSL), que es el estándar para proyectos modernos de Kotlin.



1.1. Creando el proyecto

Puedes usar Spring Initializr o crear la estructura manualmente. Necesitaremos las siguientes dependencias:

  • Spring Web — para ejecutar el servidor HTTP.
  • Spring Boot Starter GraphQL — la integración principal.
  • Kotlin Reflection — para el funcionamiento de la librería graphql-kotlin.


1.2. 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.20"    kotlin("plugin.spring") version "1.9.20"}

group = "com.example"version = "0.0.1-SNAPSHOT"

java { toolchain { languageVersion = JavaLanguageVersion.of(17) }}

repositories { mavenCentral()}

dependencies { implementation("org.springframework.boot:spring-boot-starter-web") implementation("org.springframework.boot:spring-boot-starter-graphql") implementation("com.expediagroup:graphql-kotlin-spring-server:7.0.1") implementation("org.jetbrains.kotlin:kotlin-reflect") testImplementation("org.springframework.boot:spring-boot-starter-test")}


1.3. Configuración de application.yml

spring:  graphql:    graphiql:      enabled: true  # Habilitamos la IDE integrada para pruebas    schema:      locations: "classpath:graphql/**/"server:  port: 8080


Paso 2: Definición del esquema y modelo de datos

En GraphQL, el esquema es el contrato entre el cliente y el servidor. La librería graphql-kotlin permite definir el esquema automáticamente basándose en las clases de Kotlin (enfoque code-first). Esto evita tener que escribir archivos .graphqls manualmente.



2.1. Creando el modelo de datos

Crearemos un modelo simple Book y un repositorio para almacenar datos en memoria.

package com.example.graphqlkotlin.model

data class Book( val id: String, val title: String, val author: String, val year: Int)


2.2. Repositorio (in-memory)

package com.example.graphqlkotlin.repository

import com.example.graphqlkotlin.model.Bookimport org.springframework.stereotype.Repositoryimport java.util.concurrent.ConcurrentHashMap

@Repositoryclass BookRepository { private val books = ConcurrentHashMap( mapOf( "1" to Book("1", "Guerra y Paz", "León Tolstói", 1869), "2" to Book("2", "Crimen y Castigo", "Fiódor Dostoyevski", 1866) ) )}

Blogs

Book Recommendations