Einleitung: Warum Kotlin und REST API?
\nModerne Webentwicklung ist ohne REST API undenkbar. Wenn Sie bereits mit Python und Frameworks wie Flask oder FastAPI vertraut sind, schätzen Sie sicherlich die Einfachheit und Geschwindigkeit bei der Erstellung von Serveranwendungen. Kotlin als moderne Sprache für die JVM bietet nicht weniger Eleganz und Prägnanz, insbesondere in Kombination mit dem Framework Ktor.
\nIn diesem Artikel erstellen wir in 30 Minuten eine vollwertige REST API mit Kotlin. Sie lernen, wie Sie das Projekt einrichten, Routen erstellen, JSON verarbeiten und den Server starten. Kein überflüssiges Wissen – nur Praxis.
\nWenn Sie Ihren Technologie-Stack erweitern oder einfach Kotlin für die Backend-Entwicklung ausprobieren möchten, ist dieser Leitfaden genau das Richtige für Sie.
\n\nSchritt 1: Projekteinrichtung und Abhängigkeiten
\nZunächst benötigen wir ein Kotlin-Projekt. Wir verwenden das Build-Tool Gradle (oder Maven – je nach Wahl). Der schnellste Weg ist die Erstellung eines Projekts über den Ktor Project Generator.
\nWählen Sie die folgenden Optionen:
\n- \n
- Build System: Gradle Kotlin DSL \n
- Engine: Netty (oder eine andere) \n
- Plugins: Content Negotiation (JSON), Routing, Status Pages \n
Nach dem Herunterladen des Archivs entpacken Sie es und öffnen es in IntelliJ IDEA oder einem anderen Editor.
\nWenn Sie das Projekt manuell erstellen, fügen Sie die folgenden Abhängigkeiten in build.gradle.kts hinzu:
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}\nJetzt erstellen wir die Datei Application.kt – den Einstiegspunkt der Anwendung.
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}\nFertig! Wir haben eine grundlegende Konfiguration für die Arbeit mit JSON und einen Server auf Port 8080.
\n\nSchritt 2: Erstellung des Datenmodells und des Speichers
\nFür die REST API benötigen wir Daten. Erstellen wir ein einfaches Modell User (Benutzer) und einen temporären In-Memory-Speicher.
\nZunächst definieren wir eine data-Klasse mit der 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)\nJetzt erstellen wir ein Repository-Objekt, das die Benutzer speichert:
\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}\nDies ist eine sehr einfache Lösung, aber für eine Demonstration in 30 Minuten ideal geeignet.
\n\nSchritt 3: Konfiguration der Routen (REST-Endpunkte)
\nJetzt kommt der spannendste Teil – wir erstellen Endpunkte für CRUD-Operationen. Fügen wir die Datei Routing.kt hinzu:
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