Cliente HTTP en Kotlin: haciendo solicitudes correctamente con ktor y OkHttp

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
```html

Cliente HTTP en Kotlin: haciendo solicitudes correctamente

El desarrollo moderno para Android y servicios backend en Kotlin rara vez prescinde de la interacción con APIs remotas. Crear un cliente HTTP confiable es una tarea básica, de cuya correcta solución depende la estabilidad de toda la aplicación. En este artículo analizaremos cómo hacer solicitudes HTTP en Kotlin utilizando las dos bibliotecas más populares: Ktor Client y OkHttp. Aprenderás a enviar solicitudes GET y POST, procesar JSON, gestionar errores y escribir código limpio y mantenible.

¿Por qué Ktor Client es la elección del desarrollador Kotlin moderno?

Ktor Client es un cliente HTTP asíncrono, creado específicamente para Kotlin por el equipo de JetBrains. Soporta completamente las corrutinas (coroutines), lo que hace que el código sea conciso y seguro. A diferencia de OkHttp, Ktor está diseñado desde el principio teniendo en cuenta la multiplataforma: el mismo código funciona en Android, iOS, JVM, JS y Native.

Instalación de dependencias

Para trabajar con Ktor Client, añade las siguientes dependencias en el archivo build.gradle.kts:

dependencies {
    // Cliente básico
    implementation("io.ktor:ktor-client-core:2.3.7")
    // Motor para JVM (OkHttp o CIO)
    implementation("io.ktor:ktor-client-okhttp:2.3.7")
    // Para serialización JSON
    implementation("io.ktor:ktor-client-content-negotiation:2.3.7")
    implementation("io.ktor:ktor-serialization-kotlinx-json:2.3.7")
    // Kotlinx Serialization
    implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.2")
}

Solicitud GET simple

Creemos un cliente HTTP y realicemos una solicitud GET a una API de prueba (JSONPlaceholder):

import io.ktor.client.*
import io.ktor.client.request.*
import io.ktor.client.statement.*
import kotlinx.coroutines.runBlocking

suspend fun fetchUser(userId: Int): String {
    val client = HttpClient {
        // Configuración básica
        engine {
            // Ajustes del motor OkHttp
        }
    }
    val response: HttpResponse = client.get("https://jsonplaceholder.typicode.com/users/$userId")
    return response.bodyAsText()
}

fun main() = runBlocking {
    val userData = fetchUser(1)
    println(userData)
}

Observa: fetchUser es una función suspend. Esto permite llamarla desde una corrutina sin bloquear el hilo.

Solicitud POST con cuerpo JSON

Para enviar datos en formato JSON, conectaremos el plugin ContentNegotiation y definiremos una data class:

import io.ktor.client.*
import io.ktor.client.call.*
import io.ktor.client.plugins.contentnegotiation.*
import io.ktor.client.request.*
import io.ktor.http.*
import io.ktor.serialization.kotlinx.json.*
import kotlinx.serialization.Serializable
import kotlinx.serialization.json.Json

@Serializable
data class Post(val userId: Int, val id: Int? = null, val title: String, val body: String)

suspend fun createPost(post: Post): Post {
    val client = HttpClient {
        install(ContentNegotiation) {
            json(Json {
                ignoreUnknownKeys = true
                prettyPrint = true
            })
        }
    }
    val response: Post = client.post("https://jsonplaceholder.typicode.com/posts") {
        contentType(ContentType.Application.Json)
        setBody(post)
    }.body()
    client.close()
    return response
}

fun main() = runBlocking {
    val newPost = Post(userId = 1, title = "Ktor Client", body = "¡Funciona perfectamente!")
    val createdPost = createPost(newPost)
    println(createdPost)
}

Punto clave: el plugin ContentNegotiation serializa automáticamente el objeto a JSON y deserializa la respuesta de vuelta a la data class.

OkHttp — el estándar probado para Android

OkHttp sigue siendo el estándar de facto para solicitudes de red en el desarrollo de Android. Es rápido, confiable y soporta p

```

Blogs

Book Recommendations