GraphQL sur Kotlin : Aperçu des bibliothèques et outils pour le développement serveur

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

GraphQL sur Kotlin : Aperçu complet des bibliothèques et outils



GraphQL est un langage de requête pour les API et un environnement d'exécution pour exécuter ces requêtes avec vos données existantes. Il permet aux clients de demander exactement les données dont ils ont besoin, ce qui en fait une alternative puissante à REST. Dans l'écosystème Kotlin, il existe plusieurs bibliothèques matures pour créer une partie serveur GraphQL. Dans cet article, nous analyserons en détail les principaux outils, leur syntaxe et des exemples d'utilisation.



Pourquoi Kotlin pour GraphQL ?

Kotlin, étant un langage typé statiquement fonctionnant sur la JVM, est parfaitement adapté à la construction de schémas GraphQL type-safe. Le compilateur Kotlin aide à éviter les erreurs lors de l'écriture du code, et sa syntaxe expressive rend le code propre et concis. Les principales bibliothèques pour travailler avec GraphQL en Kotlin incluent :

  • graphql-kotlin (d'Expedia Group) — la bibliothèque la plus populaire, étroitement intégrée à Spring Boot.
  • KGraphQL — une alternative axée sur une configuration simple et une API minimaliste.
  • Apollo Kotlin — une bibliothèque client pour Android et KMP, mais qui offre également des capacités serveur.


Bibliothèque graphql-kotlin

graphql-kotlin est un ensemble de bibliothèques pour construire des serveurs GraphQL en Kotlin. L'approche principale consiste à utiliser des annotations et des classes de données pour la génération automatique du schéma.



Installation

Ajoutez la dépendance dans build.gradle.kts :

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


Exemple : Requête simple

Définissons une classe de données et un résolveur :

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 { // Simulation de récupération depuis la base de données return User(id = id, name = "Alice", email = "alice@example.com") }}


graphql-kotlin générera automatiquement le schéma. Le client peut maintenant exécuter la requête :

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


La réponse contiendra uniquement les champs demandés :

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


Mutations (modification des données)

Pour les mutations, on utilise l'interface Mutation :

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

class UserMutation : Mutation { fun createUser(name: String, email: String): User { // Logique de création d'utilisateur return User(id = 2, name = name, email = email) }}


Requête correspondante :

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


Bibliothèque KGraphQL

KGraphQL propose une approche plus orientée DSL, sans nécessité d'annotations. Le schéma est construit de manière programmatique.



Installation

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


Exemple : Définition du schéma

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

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

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) } }}


Ensuite, on le connecte au framework web

Recommendations