Introduction
Kotlin est un langage de programmation moderne, concis et sûr qui gagne en popularité dans le développement d'applications serveur. Grâce à sa compatibilité avec Java et à des frameworks puissants comme Ktor, vous pouvez créer une API REST complète en seulement une demi-heure. Dans cet article, nous allons montrer comment écrire une API REST en Kotlin en utilisant le framework Ktor, même si vous êtes débutant.
Nous allons créer une application simple pour gérer une liste de tâches (Todo API) avec le support des opérations CRUD : création, lecture, mise à jour et suppression. L'ensemble du processus ne prendra pas plus de 30 minutes si vous suivez les instructions.
1. Préparation du projet et dépendances
Pour commencer, vous aurez besoin d'IntelliJ IDEA (Community Edition) et de Gradle. Créons un nouveau projet Kotlin avec le support de Ktor.
Étape 1 : Création d'un projet Gradle
Ouvrez IntelliJ IDEA et créez un nouveau projet : File → New → Project. Sélectionnez Gradle et indiquez le langage Kotlin. Cliquez sur Finish.
Étape 2 : Ajout des dépendances Ktor
Ouvrez le fichier build.gradle.kts et ajoutez les dépendances suivantes :
plugins {
kotlin("jvm") version "1.9.0"
application
}
repositories {
mavenCentral()
}
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("ch.qos.logback:logback-classic:1.4.11")
}
application {
mainClass.set("ApplicationKt")
}
Cliquez sur le bouton Sync Now dans le coin supérieur droit pour télécharger les dépendances.
2. Création du modèle de données et du service
Avant d'écrire les routes, définissons le modèle de données pour notre tâche et un service simple pour stocker les données en mémoire.
Modèle TodoItem
Créez le fichier TodoItem.kt dans le dossier src/main/kotlin :
import kotlinx.serialization.Serializable
@Serializable
data class TodoItem(
val id: Int,
val title: String,
val completed: Boolean = false
)
Service TodoService
Créez le fichier TodoService.kt :
import java.util.concurrent.atomic.AtomicInteger
class TodoService {
private val items = mutableListOf<TodoItem>()
private val idCounter = AtomicInteger(1)
fun getAll(): List<TodoItem> = items.toList()
fun getById(id: Int): TodoItem? = items.find { it.id == id }
fun create(title: String): TodoItem {
val newItem = TodoItem(id = idCounter.getAndIncrement(), title = title)
items.add(newItem)
return newItem
}
fun update(id: Int, title: String?, completed: Boolean?): TodoItem? {
val index = items.indexOfFirst { it.id == id }
if (index == -1) return null
val current = items[index]
val updated = current.copy(
title = title ?: current.title,
completed = completed ?: current.completed
)
items[index] = updated
return updated
}
fun delete(id: Int): Boolean = items.removeAll { it.id == id }
}
3. Configuration du serveur et des routes
Créons maintenant le fichier principal de l'application Application.kt et définissons les routes de l'API REST.
import io.ktor.server.application.*
import io.ktor.server.engine.*
import io.ktor.server.netty.*
import io.ktor.server.routing.*
import io.ktor.server.response.*
import io.ktor.server.request.*
import io.ktor.serialization.kotlinx.json.*
import io.ktor.server.plugins.contentnegotiation.*
fun main() {
embeddedServer(Netty, port = 8080, host = "0.0.0.0") {
configureSerialization()
configureRouting()
}.start(wait = true)
}
fun
```