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
Aussi dans la bibliothèque
Security Crypto pour Kotlin : guide complet avec exemples
Travailler avec Markdown en Go : bibliothèques blackfriday, goldmark et chroma
Protocol Buffers Java : guide complet avec exemples
Jetons JWT en Rust : bibliothèques et implémentation de l'authentification
Internationalisation (i18n) en PHP : la bibliothèque gettext et les approches modernes