Cómo escribir una API REST en Kotlin en 30 minutos: en la práctica
Kotlin es un lenguaje de programación moderno que está ganando popularidad rápidamente en el desarrollo backend. Gracias a su sintaxis concisa, compatibilidad total con Java y potentes herramientas como el framework Ktor, crear una API REST se convierte en un proceso rápido y agradable. En este artículo mostraremos en la práctica cómo escribir una API REST simple pero completa en Kotlin literalmente en media hora. Aprenderá cómo configurar el proyecto, crear endpoints, procesar JSON e iniciar el servidor.
El artículo está dirigido a desarrolladores familiarizados con los conceptos básicos de Kotlin, pero no requiere conocimientos profundos de desarrollo backend. Todo el código irá acompañado de explicaciones detalladas.
1. Configuración del proyecto y adición de dependencias
Para empezar, necesitamos crear un nuevo proyecto Kotlin. Usaremos Gradle, el sistema de compilación más popular para Kotlin. Si usa IntelliJ IDEA, seleccione «New Project» -> «Kotlin» -> «JVM | IDEA». De lo contrario, cree la carpeta del proyecto manualmente.
Primero, abra el archivo build.gradle.kts y agregue las siguientes dependencias para Ktor y serialización JSON:
plugins { kotlin("jvm") version "1.9.22" kotlin("plugin.serialization") version "1.9.22" application}
repositories { mavenCentral()}
dependencies { implementation("io.ktor:ktor-server-core:2.3.7") implementation("io.ktor:ktor-server-netty:2.3.7") implementation("io.ktor:ktor-server-content-negotiation:2.3.7") implementation("io.ktor:ktor-serialization-kotlinx-json:2.3.7") implementation("ch.qos.logback:logback-classic:1.4.14")}
application { mainClass.set("ApplicationKt")}Después de sincronizar Gradle, estamos listos para escribir código. Tenga en cuenta que usamos el plugin kotlinx.serialization para trabajar con JSON; esta es la forma estándar en Kotlin.
2. Creación del modelo de datos y archivo principal del servidor
Para la API REST necesitamos un modelo de datos. Que sea una lista simple de tareas (ToDo). Cree el archivo Todo.kt:
import kotlinx.serialization.Serializable
@Serializabledata class Todo( val id: Int, val title: String, val completed: Boolean = false)Ahora creemos el archivo principal Application.kt (o Main.kt). En él configuraremos el servidor y lo iniciaremos:
import io.ktor.server.engine.*import io.ktor.server.netty.*import io.ktor.server.application.*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 Application.configureSerialization() { install(ContentNegotiation) { json() }}
fun Application.configureRouting() { routing { get("/") { call.respondText("Hello, REST API on Kotlin!") } }}Este código inicia el servidor en el puerto 8080. Hemos conectado el módulo ContentNegotiation para la serialización/deserialización automática de JSON. Ejecute la aplicación; debería ver en el navegador en la dirección http://localhost:8080 un mensaje de bienvenida.
3. Implementación de endpoints CRUD (Create, Read, Update, Delete)
Ahora agreguemos rutas REST completas para gestionar las tareas. Usaremos una lista mutableListOf para almacenar datos en memoria (en un proyecto real, la reemplazaría por una base de datos).
Creemos el archivo TodoRepository.kt:
import kotlinx.coroutines.sync.Muteximport kotlinx.coroutines.sync.withLock
class TodoRepositor