Einführung: Warum GraphQL und Kotlin das perfekte Paar für moderne APIs sind
Moderne Webentwicklung erfordert flexible und leistungsfähige APIs. REST, lange Zeit der Standard, führt oft zu den Problemen des Over-Fetching (wenn der Server mehr Daten zurückgibt als benötigt) oder Under-Fetching (wenn mehrere Anfragen erforderlich sind, um vollständige Informationen zu erhalten). GraphQL löst diese Probleme, indem es dem Client ermöglicht, in einer einzigen Abfrage nur die benötigten Daten anzufordern.
Kotlin wiederum ist eine moderne, prägnante und typsichere Sprache, die sich gut für den Aufbau zuverlässiger Backend-Dienste eignet. Dank der graphql-kotlin Bibliothek von Expedia Group wird die Erstellung einer GraphQL-API in Kotlin einfach und intuitiv. In diesem Tutorial erstellen wir Schritt für Schritt eine vollwertige GraphQL-API zur Verwaltung einer Bücherliste.
Was Sie lernen werden:
- Wie man ein Spring Boot-Projekt mit GraphQL-Unterstützung einrichtet.
- Wie man ein GraphQL-Schema mit Kotlin-Klassen definiert.
- Wie man Queries und Mutations implementiert.
- Wie man die API über die integrierte GraphiQL-IDE testet.
Schritt 1: Projekteinrichtung und Abhängigkeiten
Zuerst erstellen wir ein neues Spring Boot-Projekt. Wir verwenden Gradle (Kotlin DSL) – das ist der Standard für moderne Kotlin-Projekte.
1.1. Das Projekt erstellen
Sie können Spring Initializr verwenden oder die Struktur manuell erstellen. Wir benötigen die folgenden Abhängigkeiten:
- Spring Web — zum Ausführen des HTTP-Servers.
- Spring Boot Starter GraphQL — die Hauptintegration.
- Kotlin Reflection — damit die graphql-kotlin-Bibliothek funktioniert.
1.2. Die build.gradle.kts-Datei
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. Die application.yml-Konfiguration
spring: graphql: graphiql: enabled: true # Aktiviert die integrierte IDE zum Testen schema: locations: "classpath:graphql/**/"server: port: 8080Schritt 2: Schema und Datenmodell definieren
In GraphQL ist das Schema der Vertrag zwischen Client und Server. Die graphql-kotlin Bibliothek ermöglicht es, das Schema automatisch auf der Grundlage von Kotlin-Klassen zu definieren (Code-First-Ansatz). Dadurch entfällt die Notwendigkeit, .graphqls-Dateien manuell zu schreiben.
2.1. Das Datenmodell erstellen
Erstellen wir ein einfaches Book-Modell und ein Repository zum Speichern von Daten im Speicher.
package com.example.graphqlkotlin.model
data class Book( val id: String, val title: String, val author: String, val year: Int)2.2. Repository (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", "War and Peace", "Leo Tolstoy", 1869), "2" to Book("2", "Crime and Punishment", "Fyodor Dostoevsky", 1866)\