GraphQL auf Kotlin: Überblick über Bibliotheken und Tools für die Serverentwicklung

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

GraphQL auf Kotlin: Vollständiger Überblick über Bibliotheken und Tools



GraphQL ist eine Abfragesprache für APIs und eine Laufzeitumgebung zur Ausführung dieser Abfragen mit Ihren vorhandenen Daten. Es ermöglicht Clients, genau die Daten anzufordern, die sie benötigen, was es zu einer leistungsstarken Alternative zu REST macht. Im Kotlin-Ökosystem gibt es mehrere ausgereifte Bibliotheken zur Erstellung von GraphQL-Backends. In diesem Artikel werden wir die wichtigsten Tools, ihre Syntax und Anwendungsbeispiele im Detail analysieren.



Warum Kotlin für GraphQL?

Kotlin, eine statisch typisierte Sprache, die auf der JVM läuft, eignet sich hervorragend für die Erstellung typsicherer GraphQL-Schemata. Der Kotlin-Compiler hilft, Fehler bereits beim Schreiben des Codes zu vermeiden, und die ausdrucksstarke Syntax macht den Code sauber und prägnant. Die wichtigsten Bibliotheken für die Arbeit mit GraphQL in Kotlin sind:

  • graphql-kotlin (von Expedia Group) – die beliebteste Bibliothek, die eng mit Spring Boot integriert ist.
  • KGraphQL – eine Alternative mit Fokus auf einfache Konfiguration und minimalistische API.
  • Apollo Kotlin – eine Client-Bibliothek für Android und KMP, bietet aber auch Server-Funktionen.


Die Bibliothek graphql-kotlin

graphql-kotlin ist eine Sammlung von Bibliotheken zum Erstellen von GraphQL-Servern in Kotlin. Der Hauptansatz ist die Verwendung von Annotationen und Datenklassen zur automatischen Schema-Generierung.



Installation

Fügen Sie die Abhängigkeit in build.gradle.kts hinzu:

dependencies {    implementation("com.expediagroup:graphql-kotlin-spring-server:7.0.0")    implementation("com.expediagroup:graphql-kotlin-schema-generator:7.0.0")}


Beispiel: Eine einfache Abfrage

Definieren wir eine Datenklasse und einen Resolver:

import com.expediagroup.graphql.server.operations.Query

data class User(val id: Int, val name: String, val email: String)

class UserQuery : Query { fun getUser(id: Int): User { // Simuliert das Abrufen aus der Datenbank return User(id = id, name = "Alice", email = "alice@example.com") }}


graphql-kotlin generiert automatisch das Schema. Nun kann der Client eine Abfrage ausführen:

query {  getUser(id: 1) {    name    email  }}


Die Antwort enthält nur die angeforderten Felder:

{  "data": {    "getUser": {      "name": "Alice",      "email": "alice@example.com"    }  }}


Mutationen (Datenänderung)

Für Mutationen wird das Interface Mutation verwendet:

import com.expediagroup.graphql.server.operations.Mutation

class UserMutation : Mutation { fun createUser(name: String, email: String): User { // Logik zur Benutzererstellung return User(id = 2, name = name, email = email) }}


Die entsprechende Abfrage:

mutation {  createUser(name: "Bob", email: "bob@example.com") {    id    name  }}


Die Bibliothek KGraphQL

KGraphQL bietet einen eher DSL-orientierten Ansatz ohne die Notwendigkeit von Annotationen. Das Schema wird programmatisch erstellt.



Installation

dependencies {    implementation("com.apurebase:kgraphql:0.18.0")    implementation("com.apurebase:kgraphql-ktor:0.18.0") // für Ktor}


Beispiel: Schema-Definition

import com.apurebase.kgraphql.schema.dsl.SchemaBuilder

val schema = SchemaBuilder { query("hello") { resolver { -> "Hallo, Welt!" } }

query("user") { resolver { id: Int -> User(id = id, name = "Charlie", email = "charlie@example.com") } }

mutation("createUser") { resolver { name: String, email: String -> User(id = 3, name = name, email = email) } }}


Anschließend wird es mit dem Web-Framework verbunden

Empfehlungen