Cómo escribir una API REST en Kotlin en 30 minutos: guía paso a paso

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Introducción: ¿Por qué Kotlin y API REST?

\n

El desarrollo web moderno es impensable sin una API REST. Si ya conoces Python y frameworks como Flask o FastAPI, seguramente aprecias la simplicidad y velocidad para crear aplicaciones de servidor. Kotlin, como lenguaje moderno para la JVM, ofrece no menos elegancia y concisión, especialmente en combinación con el framework Ktor.

\n

En este artículo crearemos una API REST completa en Kotlin en 30 minutos. Aprenderás a configurar el proyecto, crear rutas, manejar JSON e iniciar el servidor. Sin rodeos, solo práctica.

\n

Si deseas ampliar tu stack tecnológico o simplemente probar Kotlin para el desarrollo backend, esta guía es para ti.

\n\n

Paso 1: Configuración del proyecto y dependencias

\n

Para empezar, necesitamos un proyecto en Kotlin. Usaremos el gestor de compilación Gradle (o Maven, según tu preferencia). La forma más rápida es crear un proyecto a través de Ktor Project Generator.

\n

Selecciona las siguientes opciones:

\n
    \n
  • Build System: Gradle Kotlin DSL
  • \n
  • Engine: Netty (o cualquier otro)
  • \n
  • Plugins: Content Negotiation (JSON), Routing, Status Pages
  • \n
\n

Después de descargar el archivo, descomprímelo y ábrelo en IntelliJ IDEA u otro editor.

\n

Si creas el proyecto manualmente, agrega las siguientes dependencias en build.gradle.kts:

\n
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}
\n

Ahora creemos el archivo Application.kt — el punto de entrada de la aplicación.

\n
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}
\n

¡Listo! Tenemos una configuración básica para trabajar con JSON y un servidor en el puerto 8080.

\n\n

Paso 2: Creación del modelo de datos y almacenamiento

\n

Para la API REST necesitamos datos. Creemos un modelo simple User (usuario) y un almacenamiento temporal en memoria.

\n

Primero, definamos una clase de datos con la anotación @Serializable:

\n
import kotlinx.serialization.Serializable\n\n@Serializable\ndata class User(\n    val id: Int,\n    val name: String,\n    val email: String\n)
\n

Ahora creemos un objeto repositorio que almacenará los usuarios:

\n
object UserRepository {\n    private val users = mutableListOf(\n        User(1, "Iván Ivanov", "ivan@example.com"),\n        User(2, "María 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}
\n

Esta es una solución muy simple, pero para una demostración en 30 minutos es perfecta.

\n\n

Paso 3: Configuración de rutas (endpoints REST)

\n

Ahora viene la parte más interesante: crearemos los endpoints para las operaciones CRUD. Agreguemos el archivo Routing.kt:

\n
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                

Blogs

Book Recommendations