Introduction : Pourquoi Kotlin et l'API REST ?
\nLe développement web moderne est impensable sans API REST. Si vous connaissez déjà Python et des frameworks comme Flask ou FastAPI, vous appréciez sûrement la simplicité et la rapidité de création d'applications serveur. Kotlin, en tant que langage moderne pour la JVM, offre une élégance et une concision tout aussi grandes, surtout en combinaison avec le framework Ktor.
\nDans cet article, nous allons créer en 30 minutes une API REST complète en Kotlin. Vous apprendrez à configurer le projet, créer des routes, traiter du JSON et lancer le serveur. Pas de blabla — que de la pratique.
\nSi vous souhaitez élargir votre stack technologique ou simplement essayer Kotlin pour le développement backend, ce guide est pour vous.
\n\nÉtape 1 : Configuration du projet et des dépendances
\nPour commencer, nous avons besoin d'un projet Kotlin. Nous utiliserons l'outil de build Gradle (ou Maven — à votre choix). Le moyen le plus rapide est de créer un projet via Ktor Project Generator.
\nSélectionnez les options suivantes :
\n- \n
- Build System : Gradle Kotlin DSL \n
- Engine : Netty (ou un autre) \n
- Plugins : Content Negotiation (JSON), Routing, Status Pages \n
Après avoir téléchargé l'archive, décompressez-la et ouvrez-la dans IntelliJ IDEA ou un autre éditeur.
\nSi vous créez le projet manuellement, ajoutez les dépendances suivantes dans build.gradle.kts :
dependencies {\n implementation("io.ktor:ktor-server-core:2.3.0")\n implementation("io.ktor:ktor-server-netty:2.3.0")\n implementation("io.ktor:ktor-server-content-negotiation:2.3.0")\n implementation("io.ktor:ktor-serialization-kotlinx-json:2.3.0")\n implementation("ch.qos.logback:logback-classic:1.4.11")\n}\nCréons maintenant le fichier Application.kt — le point d'entrée de l'application.
import io.ktor.server.engine.*\nimport io.ktor.server.netty.*\nimport io.ktor.server.application.*\nimport io.ktor.server.plugins.contentnegotiation.*\nimport io.ktor.serialization.kotlinx.json.*\nimport kotlinx.serialization.json.Json\n\nfun main() {\n embeddedServer(Netty, port = 8080, host = "0.0.0.0") {\n configureSerialization()\n configureRouting()\n }.start(wait = true)\n}\n\nfun Application.configureSerialization() {\n install(ContentNegotiation) {\n json(Json {\n prettyPrint = true\n isLenient = true\n })\n }\n}\nVoilà ! Nous avons une configuration de base pour travailler avec JSON et un serveur sur le port 8080.
\n\nÉtape 2 : Création du modèle de données et du stockage
\nPour une API REST, nous avons besoin de données. Créons un modèle simple User (utilisateur) et un stockage temporaire en mémoire.
\nD'abord, définissons une classe de données avec l'annotation @Serializable :
import kotlinx.serialization.Serializable\n\n@Serializable\ndata class User(\n val id: Int,\n val name: String,\n val email: String\n)\nCréons maintenant un objet repository qui stockera les utilisateurs :
\nobject UserRepository {\n private val users = mutableListOf(\n User(1, "Ivan Ivanov", "ivan@example.com"),\n User(2, "Maria Petrova", "maria@example.com")\n )\n\n fun getAll(): List<User> = users.toList()\n\n fun getById(id: Int): User? = users.find { it.id == id }\n\n fun add(user: User): User {\n users.add(user)\n return user\n }\n\n fun delete(id: Int): Boolean = users.removeIf { it.id == id }\n}\nC'est une solution très simple, mais pour une démonstration en 30 minutes, elle est parfaite.
\n\nÉtape 3 : Configuration des routes (endpoints REST)
\nPassons maintenant à la partie la plus intéressante — créons les endpoints pour les opérations CRUD. Ajoutons le fichier Routing.kt :
import io.ktor.server.routing.*\nimport io.ktor.server.response.*\nimport io.ktor.server.request.*\n\nfun Application.configureRouting() {\n routing {\n route("/api/u