GraphQL API mit Kotlin: Schritt-für-Schritt-Tutorial

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Einführung in GraphQL und Kotlin

GraphQL ist eine Abfragesprache für APIs, die es Clients ermöglicht, nur die Daten zu erhalten, die sie wirklich benötigen. Im Gegensatz zu REST, wo jeder Endpunkt eine feste Struktur zurückgibt, bietet GraphQL Flexibilität: Eine einzige Abfrage kann Daten aus verschiedenen Quellen kombinieren. Kotlin wiederum ist eine moderne Sprache für die JVM, die Prägnanz und Typsicherheit vereint. In diesem Tutorial erstellen wir eine vollständige GraphQL-API mit Kotlin und der Bibliothek graphql-kotlin-spring-server.

Sie erfahren, wie Sie das Projekt einrichten, das Schema definieren, Resolver schreiben und die API über GraphiQL testen. Bereit? Los geht's!



1. Projekteinrichtung

1.1. Erstellen einer Spring Boot-Anwendung

Erstellen Sie zunächst ein neues Projekt auf Spring Initializr. Wählen Sie:

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

Fügen Sie nach dem Herunterladen die GraphQL-Abhängigkeit in build.gradle.kts hinzu:

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

Erstellen Sie die Datei application.yml in src/main/resources:

server:  port: 8080

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

Dies weist Spring Boot an, das Paket com.example.graphql.demo nach Resolvern und Typen zu durchsuchen.



2. Definition des GraphQL-Schemas

2.1. Erstellen des Datenmodells

Erstellen wir ein einfaches Modell für ein Buch und einen Autor. In Kotlin verwenden wir 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. Schema-Definition über Code (SDL)

Anstatt eine schema.graphqls-Datei zu schreiben, verwenden wir die Annotationen @GraphQLDescription und @GraphQLIgnore. Die Bibliothek graphql-kotlin generiert das Schema automatisch basierend auf den Klassen. Zur Verdeutlichung erstellen wir jedoch eine Datei schema.graphqls in 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. Implementierung der Resolver

3.1. Service für die Datenspeicherung

Der Einfachheit halber verwenden wir einen In-Memory-Speicher:

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

Buchempfehlungen