API GraphQL avec Kotlin : tutoriel pratique étape par étape

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

Introduction : Pourquoi GraphQL et Kotlin ?

\n

Dans le monde du développement web moderne, le choix de la bonne approche pour créer une API peut déterminer le succès de tout un projet. GraphQL, développé par Facebook, offre une alternative flexible à REST, permettant aux clients de demander uniquement les données dont ils ont réellement besoin. Et Kotlin, un langage de programmation moderne pour la JVM, ajoute à cela la concision, la null-sécurité et un puissant support des coroutines.

\n

Dans ce tutoriel, nous allons créer en pratique une API GraphQL complète en utilisant Kotlin et le framework graphql-kotlin-spring-server. Vous apprendrez à configurer le serveur, définir le schéma de données, écrire des résolveurs et tester l'API. À la fin de cet article, vous serez capable d'intégrer GraphQL dans vos propres projets Kotlin.

\n\n

1. Configuration du projet et dépendances

\n

Pour commencer, créons un nouveau projet Spring Boot avec le support de GraphQL. Nous utiliserons Gradle comme système de build.

\n\n

1.1. Création de la structure de base

\n

Créez un nouveau projet dans IntelliJ IDEA ou via Spring Initializr. Ajoutez les dépendances suivantes dans build.gradle.kts :

\n
plugins {\n    id("org.springframework.boot") version "3.2.0"\n    id("io.spring.dependency-management") version "1.1.4"\n    kotlin("jvm") version "1.9.21"\n    kotlin("plugin.spring") version "1.9.21"\n}\n\ndependencies {\n    implementation("org.springframework.boot:spring-boot-starter-web")\n    implementation("com.expediagroup:graphql-kotlin-spring-server:7.0.1")\n    implementation("org.jetbrains.kotlin:kotlin-reflect")\n    implementation("org.jetbrains.kotlin:kotlin-stdlib")\n    testImplementation("org.springframework.boot:spring-boot-starter-test")\n}
\n\n

1.2. Configuration de l'application

\n

Créez un fichier application.yml dans src/main/resources :

\n
server:\n  port: 8080\n\ngraphql:\n  packages:\n    - "com.example.graphqldemo"\n  schema:\n    introspection-enabled: true\n    exception-handlers-enabled: true
\n

Il s'agit de la configuration de base. Le paramètre introspection-enabled: true permet d'utiliser GraphiQL pour les tests.

\n\n

2. Définition du schéma GraphQL

\n

Dans graphql-kotlin, le schéma est construit automatiquement à partir de vos classes de données (data classes). C'est l'un des principaux avantages : il n'est pas nécessaire d'écrire un fichier SDL séparé.

\n\n

2.1. Création du modèle de données

\n

Supposons que nous créons une API pour une bibliothèque de livres. Définissons les modèles :

\n
package com.example.graphqldemo.model\n\ndata class Book(\n    val id: String,\n    val title: String,\n    val author: Author,\n    val year: Int,\n    val genre: String\n)\n\ndata class Author(\n    val id: String,\n    val name: String,\n    val books: List<Book> = emptyList()\n)\n\n// Types d'entrée pour les mutations\ndata class BookInput(\n    val title: String,\n    val authorId: String,\n    val year: Int,\n    val genre: String\n)
\n\n

2.2. Service de gestion des données

\n

Créons un service simple en mémoire qui stockera les données :

\n
package com.example.graphqldemo.service\n\nimport com.example.graphqldemo.model.Author\nimport com.example.graphqldemo.model.Book\nimport com.example.graphqldemo.model.BookInput\nimport org.springframework.stereotype.Service\nimport java.util.UUID\n\n@Service\nclass LibraryService {\n    private val authors = mutableListOf(\n        Author("1", "J.K. Rowling"),\n        Author("2", "George Orwell")\n    )\n    private val books = mutableListOf(\n        Book("1", "Harry Potter à l'école des sorciers", authors[0], 1997, "Fantasy"),\n        Book("2", "1984", authors[1], 1949, "Dystopie")\n    )\n\n    fun getBooks(): List<Book> = books\n    fun getBookById(id: String): Book? = books.find { it.id == id }\n    fun getAuthors(): List<Author> = authors\n    fun addBook(input: BookInput): Book {\n        val author = authors.fin                

Blogs

Book Recommendations