Introduction
Kotlin est un langage de programmation moderne, statiquement typé, qui fonctionne sur la machine virtuelle Java (JVM) et est totalement compatible avec l'écosystème Java. Grâce à sa concision, sa sécurité et ses puissantes capacités fonctionnelles, Kotlin est devenu l'un des langages les plus populaires pour le développement d'applications serveur, surtout après que Google l'a choisi comme langage principal pour Android.
Dans cet article, nous allons créer une API REST complète en Kotlin, en utilisant le framework léger Ktor et la bibliothèque de gestion de bases de données Exposed. Nous implémenterons un service simple de gestion de tâches (To-Do List) avec le support de toutes les opérations CRUD (création, lecture, mise à jour, suppression). L'ensemble du processus ne vous prendra pas plus de 30 minutes si vous avez déjà installé IntelliJ IDEA et le JDK.
1. Configuration du projet
Pour commencer, créons un nouveau projet Kotlin avec le support de Gradle. Ouvrez IntelliJ IDEA et sélectionnez File → New → Project. Dans l'assistant de création de projet, choisissez Kotlin → JVM.
Étape 1.1 : Structure de build.gradle.kts
Ajoutez les dépendances suivantes dans le fichier build.gradle.kts :
plugins { kotlin("jvm") version "1.9.0" id("io.ktor.plugin") version "2.3.0" kotlin("plugin.serialization") version "1.9.0"}
dependencies { implementation("io.ktor:ktor-server-core:2.3.0") implementation("io.ktor:ktor-server-netty:2.3.0") implementation("io.ktor:ktor-server-content-negotiation:2.3.0") implementation("io.ktor:ktor-serialization-kotlinx-json:2.3.0") implementation("org.jetbrains.exposed:exposed-core:0.41.1") implementation("org.jetbrains.exposed:exposed-dao:0.41.1") implementation("org.jetbrains.exposed:exposed-jdbc:0.41.1") implementation("com.h2database:h2:2.1.214") implementation("ch.qos.logback:logback-classic:1.4.7")}Ces dépendances incluent : le framework Ktor lui-même, le support de la sérialisation JSON, la bibliothèque Exposed pour la gestion de la base de données et la base de données intégrée H2 pour les tests.
Étape 1.2 : Point d'entrée
Créez le fichier Application.kt dans le package com.example :
import io.ktor.server.engine.*import io.ktor.server.netty.*import com.example.plugins.*
fun main() { embeddedServer(Netty, port = 8080) { configureSerialization() configureRouting() }.start(wait = true)}2. Configuration de la sérialisation et du routage
Étape 2.1 : Plugins de l'application
Créez le répertoire plugins et le fichier Serialization.kt :
package com.example.plugins
import io.ktor.serialization.kotlinx.json.*import io.ktor.server.application.*import io.ktor.server.plugins.contentnegotiation.*
fun Application.configureSerialization() { install(ContentNegotiation) { json() }}Étape 2.2 : Définition du modèle de données
Créez le fichier Models.kt :
package com.example.models
import kotlinx.serialization.Serializable
@Serializabledata class Task( val id: Int = 0, val title: String, val description: String = "", val completed: Boolean = false)3. Travail avec la base de données
Étape 3.1 : Configuration de la connexion
Créez le fichier DatabaseFactory.kt :
package com.example.database
import org.jetbrains.exposed.sql.Databaseimport org.jetbrains.exposed.sql.SchemaUtilsimport org.jetbrains.exposed.sql.transactions.transaction
object DatabaseFactory { fun init() { Database.connect("jdbc:h2:mem:test;DB_CLOSE_DELAY=-1", driver = "org.h2.Driver") transaction { SchemaUtils.create(TasksTable) } }}Étape 3.2 : Définition de la table
Dans le même package, créez TasksTable.kt :
package co