API GraphQL con Kotlin: tutorial paso a paso

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

Introducción a GraphQL y Kotlin

GraphQL es un lenguaje de consultas para APIs que permite a los clientes obtener solo los datos que realmente necesitan. A diferencia de REST, donde cada endpoint devuelve una estructura fija, GraphQL ofrece flexibilidad: una sola consulta puede combinar datos de diferentes fuentes. Kotlin, por su parte, es un lenguaje moderno para la JVM que combina concisión y seguridad de tipos. En este tutorial crearemos una API GraphQL completa usando Kotlin y la biblioteca graphql-kotlin-spring-server.

Aprenderás a configurar el proyecto, definir el esquema, escribir resolvers y probar la API a través de GraphiQL. ¿Listos? ¡Vamos allá!



1. Configuración del proyecto

1.1. Creación de una aplicación Spring Boot

Para empezar, crearemos un nuevo proyecto en Spring Initializr. Selecciona:

  • Project: Gradle (Kotlin)
  • Language: Kotlin
  • Spring Boot: 3.2+
  • Dependencies: Spring Web, Spring Boot DevTools

Después de descargarlo, añade la dependencia para GraphQL en build.gradle.kts:

dependencies {    implementation("com.expediagroup:graphql-kotlin-spring-server:7.0.0")    implementation("org.springframework.boot:spring-boot-starter-web")    implementation("com.fasterxml.jackson.module:jackson-module-kotlin")    testImplementation("org.springframework.boot:spring-boot-starter-test")}


1.2. Configuración de la aplicación

Crea el archivo application.yml en src/main/resources:

server:  port: 8080

graphql: packages: - "com.example.graphql.demo"

Esto indicará a Spring Boot que escanee el paquete com.example.graphql.demo para buscar resolvers y tipos.



2. Definición del esquema GraphQL

2.1. Creación del modelo de datos

Crearemos un modelo simple para libro y autor. En Kotlin usamos data class:

// src/main/kotlin/com/example/graphql/demo/model/Book.ktpackage com.example.graphql.demo.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 books: List<Book> = emptyList())


2.2. Definición del esquema mediante código (SDL)

En lugar de escribir un archivo schema.graphqls, usaremos las anotaciones @GraphQLDescription y @GraphQLIgnore. La biblioteca graphql-kotlin genera automáticamente el esquema basándose en las clases. Sin embargo, para mayor claridad, crearemos el archivo schema.graphqls en src/main/resources:

type Query {    books: [Book!]!    book(id: String!): Book    authors: [Author!]!}

type Mutation { addBook(title: String!, authorId: String!, year: Int!): Book!}

type Book { id: String! title: String! author: Author! year: Int!}

type Author { id: String! name: String! books: [Book!]!}


3. Implementación de resolvers

3.1. Servicio para almacenamiento de datos

Para simplificar, usaremos un almacenamiento en memoria:

// src/main/kotlin/com/example/graphql/demo/service/LibraryService.ktpackage com.example.graphql.demo.service

import com.example.graphql.demo.model.Authorimport com.example.graphql.demo.model.Bookimport org.springframework.stereotype.Serviceimport java.util.UUID

@Serviceclass LibraryService { private val authors = mutableListOf( Author(id = "1", name = "George Orwell"), Author(id = "2", name = "Ray Bradbury") )

private val books = mutableListOf( Book(id = "1", title = "1984", author = authors[0], year = 1949), Book(id = "2", title = "Fahrenheit 451", author = authors[1], year = 1953) )

fun getBooks(): List<Book> = books```

Blogs

Book Recommendations