Einführung in GraphQL API mit Kotlin
GraphQL ist eine Abfragesprache für APIs, die von Facebook entwickelt wurde und es Clients ermöglicht, nur die Daten anzufordern, die sie tatsächlich benötigen. Im Gegensatz zu REST, wo jeder Endpunkt eine feste Datenstruktur zurückgibt, bietet GraphQL Flexibilität und Kontrolle. Kotlin, als moderne statisch typisierte Sprache für die JVM, eignet sich aufgrund seiner Prägnanz und Sicherheit ideal für die Erstellung solcher APIs. In diesem Tutorial erstellen wir Schritt für Schritt einen einfachen GraphQL-Server mit Kotlin unter Verwendung der Bibliothek graphql-kotlin und Spring Boot.
Am Ende des Artikels werden Sie lernen:
- Ein Kotlin-Projekt mit Gradle einzurichten
- Ein GraphQL-Schema zu definieren (Typen, Abfragen, Mutationen)
- Resolver zur Verarbeitung von Abfragen zu implementieren
- Die API über GraphQL Playground zu testen
Schritt 1: Projekteinrichtung und Abhängigkeiten
Zunächst erstellen wir ein neues Kotlin-Projekt mit Gradle. Wir verwenden Spring Boot zur Vereinfachung der Konfiguration und graphql-kotlin-spring-server für die GraphQL-Integration.
Erstellung des Basisprojekts
Erstellen Sie ein Projektverzeichnis und die Datei 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" }} Erstellen Sie dann die Hauptanwendungsklasse in 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)}Schritt 2: Definition des Datenmodells und des GraphQL-Schemas
GraphQL verwendet eine strenge Typisierung. Definieren wir ein einfaches Datenmodell – ein Buch (Book) und einen Autor (Author).
Erstellung der Datenklassen
Erstellen Sie die Datei 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)Die Bibliothek graphql-kotlin generiert automatisch GraphQL-Typen basierend auf diesen data-Klassen. Jedes Feld wird zu einem Feld im Schema.
Resolver für Abfragen
Erstellen wir nun einen Service, der die Daten bereitstellt. Erstellen Sie 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", "Krieg und Frieden", Author("a1", "Lew Tolstoi", "Russland"), 1869), Book("2", "Verbrechen und Strafe", Author("a2", "Fjodor Dostojewski", "Russland"), 1866), Book("3", "1984", Author("a3", "George Orwell", "Großbritannien"), 1949) )
fun getAllBooks(): List<Book> = books fun getBookById(id: String): Book? = books.find { it