Pourquoi Kotlin est le meilleur choix pour les microservices en 2024 ?
\n\nAvez-vous déjà écrit un microservice en Python, puis pensé : « Et s'il fonctionnait plus vite, consommait moins de mémoire tout en gardant un code aussi lisible ? » Cela vous parle ? Alors bienvenue dans le monde de Kotlin — le langage que Google a choisi pour Android, et la communauté des développeurs backend pour créer des microservices légers et performants.
\n\nKotlin s'intègre parfaitement à l'architecture microservices : il est statiquement typé, compile en bytecode JVM (ou en code natif via Kotlin/Native), mais sans nécessiter des tonnes de code passe-partout comme Java. Et surtout, ses coroutines (coroutines) permettent de traiter des milliers de requêtes sur un seul thread sans la douleur du callback hell.
\n\nDans cet article, nous n'allons pas faire de cours théoriques. Nous allons écrire deux microservices : User Service (API REST) et Notification Service (simulation d'envoi d'e-mails). Le tout en Kotlin pur + Ktor. C'est parti !
\n\n1. Outillage : quoi installer avant de commencer
\n\nAvant d'écrire du code, assurons-nous que votre ordinateur est prêt au combat.
\n\nCe qu'il faut installer :
\n- \n
- JDK 17+ — Kotlin fonctionne sur la JVM, donc pas de Java, pas de Kotlin. Téléchargez-le depuis Adoptium. \n
- IntelliJ IDEA Community Edition — la meilleure IDE pour Kotlin (oui, elle vient de JetBrains, et oui, elle est gratuite). \n
- Gradle (ou Maven) — système de build. IntelliJ l'intègre déjà, mais si vous voulez l'installer séparément — gradle.org. \n
- Docker (optionnel, mais simplifiera grandement le déploiement). \n
Si vous êtes sur macOS ou Linux — vous êtes déjà à mi-chemin du succès. Sous Windows, je recommande WSL2.
\n\n2. Création de notre premier microservice : User Service avec Ktor
\n\nKtor est un framework créé par les développeurs de Kotlin. Il est extrêmement léger : vous décidez vous-même quels modules inclure (routage, sérialisation, journalisation). Aucune magie — que du code pur.
\n\n2.1. Génération du projet
\nLe moyen le plus rapide est d'utiliser le Ktor Project Generator. Choisissez :
\n- \n
- Build system : Gradle Kotlin DSL \n
- Engine : Netty (le plus populaire) \n
- Plugins : Routing, Content Negotiation (JSON), Status Pages \n
Téléchargez l'archive, ouvrez-la dans IntelliJ — et en 2 minutes, vous avez un squelette prêt.
\n\n2.2. Écrire une API REST : récupération des utilisateurs
\nCréons un modèle simple et un endpoint. Le code sera aussi lisible que possible :
\n\n// Model.kt\ndata class User(\n val id: Int,\n val name: String,\n val email: String\n)\n\n// UserRepository.kt\nobject UserRepository {\n private val users = mutableListOf(\n User(1, "Alice", "alice@example.com"),\n User(2, "Bob", "bob@example.com")\n )\n\n fun findAll(): List<User> = users\n fun findById(id: Int): User? = users.find { it.id == id }\n}\n\n// Application.kt (point d'entrée)\nfun main() {\n embeddedServer(Netty, port = 8080) {\n configureSerialization()\n configureRouting()\n }.start(wait = true)\n}\n\n// Routing.kt\nfun Application.configureRouting() {\n routing {\n route("/api/v1/users") {\n get {\n call.respond(UserRepository.findAll())\n }\n get("/{id}") {\n val id = call.parameters["id"]?.toIntOrNull()\n if (id == null) {\n call.respond(HttpStatusCode.BadRequest, "Invalid ID")\n return@get\n }\n val user = UserRepository.findById(id)\n if (user != null) {\n call.respond(user)\n } else {\n call.respond(HttpStatusCode.NotFound, "User not found")\n