Introduction à GraphQL API avec Kotlin
GraphQL est un langage de requêtes pour API, développé par Facebook, qui permet aux clients de demander uniquement les données dont ils ont réellement besoin. Contrairement à REST, où chaque endpoint renvoie une structure de données fixe, GraphQL offre flexibilité et contrôle. Kotlin, en tant que langage moderne typé statiquement pour la JVM, est idéal pour créer de telles API grâce à sa concision et sa sécurité. Dans ce tutoriel, nous allons créer pas à pas un serveur GraphQL simple en Kotlin en utilisant la bibliothèque graphql-kotlin et Spring Boot.
À la fin de cet article, vous apprendrez à :
- Configurer un projet Kotlin avec Gradle
- Définir un schéma GraphQL (types, requêtes, mutations)
- Implémenter des résolveurs pour traiter les requêtes
- Tester l'API via GraphQL Playground
Étape 1 : Configuration du projet et des dépendances
Pour commencer, créons un nouveau projet Kotlin en utilisant Gradle. Nous utiliserons Spring Boot pour simplifier la configuration et graphql-kotlin-spring-server pour l'intégration GraphQL.
Création du projet de base
Créez un répertoire de projet et un fichier 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" }} Ensuite, créez la classe principale de l'application dans 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)}Étape 2 : Définition du modèle de données et du schéma GraphQL
GraphQL utilise un typage strict. Définissons un modèle de données simple — un livre (Book) et un auteur (Author).
Création des classes de données
Créez le fichier 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)La bibliothèque graphql-kotlin générera automatiquement les types GraphQL à partir de ces classes de données. Chaque champ deviendra un champ dans le schéma.
Résolveurs pour les requêtes
Créons maintenant un service qui fournira les données. Créez 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", "Guerre et Paix", Author("a1", "Léon Tolstoï", "Russie"), 1869), Book("2", "Crime et Châtiment", Author("a2", "Fiodor Dostoïevski", "Russie"), 1866), Book("3", "1984", Author("a3", "George Orwell", "Royaume-Uni"), 1949) )
fun getAllBooks(): List<Book> = books fun getBookById(id: String): Book? = books.find { it