Usar Ktor Client para hacer peticiones HTTP en Android
Antonio Leiva

Ktor es un framework de servidor y cliente de Kotlin diseñado para crear aplicaciones web y móviles de forma rápida y fácil.

En este artículo, veremos cómo usar Ktor client en una aplicación Android para hacer peticiones a una API.

Configurar las dependencias de Ktor

Antes de comenzar, asegúrate de tener la dependencia de Ktor client en tu archivo build.gradle, así como el plugin de ContentNegotiation:

implementation("io.ktor:ktor-client-core:$ktor_version")
implementation("io.ktor:ktor-client-okhttp:$ktor_version")
implementation("io.ktor:ktor-client-content-negotiation:$ktor_version")

El plugin sirve para convertir objetos en Json. Para que esto funcione correctamente, también necesitas la librería y el plugin Serializable:

plugins {
    ...
    kotlin("plugin.serialization") version "1.6.10"
}

dependencies {
    ...
    implementation("io.ktor:ktor-serialization-kotlinx-json:$ktor_version")
}

Configurar el servidor de Ktor

Para hacer una petición a una API con Ktor client, primero debes crear un objeto HttpClient. Esto se puede hacer de la siguiente manera:

val notesClient = HttpClient() {
    install(ContentNegotiation) {
        json()
    }
}

El bloque de inicialización del HttpClient te permite instalar diferentes «características», como ContentNegotiation, que se encarga de la serialización y deserialización de datos en formato JSON.

En este caso, estamos usando la librería de Kotlin como serializador, pero se podrían usar otras librerías.

Hacer una petición GET con Ktor

Una vez que tienes tu HttpClient creado, puedes hacer una petición a una API de la siguiente manera:

val response = notesClient.get(NOTES_URL)

En este ejemplo, estamos haciendo una petición GET a la URL especificada y esperamos obtener una respuesta de tipo Note.

Es necesario que el tipo de dato que recibas esté marcado como Serializable, para que el plugin de Kotlin haga su trabajo:

@Serializable
data class Note(...)

También puedes agregar parámetros a tu petición y encabezados HTTP usando el método url:

val response = notesClient.get {
    url(NOTES_URL)
    parameter("param1", "value1")
    header("Authorization", "Bearer abc123")
}

Otros tipos de peticiones

Además de GET, Ktor client también soporta otras operaciones HTTP como POST, PUT y DELETE. Aquí hay un ejemplo de cómo hacer una petición POST con un cuerpo de datos en formato JSON:

notesClient.post(NOTES_URL) {
    setBody(note)
    contentType(ContentType.Application.Json)
}

Ktor está basado en las corrutinas de Kotlin

Es importante tener en cuenta que todas las peticiones HTTP con Ktor client son asíncronas, por lo que deben ser realizadas en un hilo en segundo plano.

En una aplicación Android, esto se puede hacer con el framework de ejecución de tareas de Kotlin Coroutines.

Para usar Coroutines, debes agregar la siguiente dependencia a tu archivo build.gradle:

implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core-android:1.6.3")

Luego, puedes hacer una petición GET a una API de la siguiente manera:

suspend fun getAll(): List<Note> {
    val response = notesClient.request(NOTES_URL)
    return response.body()
}

// Llamar a la función desde un contexto de corrutina
scope.launch {
    state = UiState(loading = true)
    val response = NotesRepository.getAll()
    state = UiState(notes = response)
}

Conclusión

Espero que este ejemplo te haya ayudado a entender cómo usar Ktor client para hacer peticiones a una API en una aplicación Android.

Recuerda que Ktor client es muy versátil y puede ser utilizado para muchas otras cosas además de hacer peticiones HTTP, como enviar y recibir WebSockets o realizar descargas de archivos.

¡Explora todas sus características y encuentra la mejor manera de usarlo en tu proyecto!

Quizá también te interese…

Cómo crear un backend en Kotlin usando Ktor

Cómo crear un backend en Kotlin usando Ktor

Ktor es un framework de servidor web ligero y rápido para Kotlin, desarrollado por JetBrains. Es ideal para crear aplicaciones web y servicios RESTful, y es muy fácil de usar y configurar. En este artículo, vamos a ver cómo crear un backend para una aplicación de...

Cómo simular una base de datos reactiva en Room con Fakes

Cómo simular una base de datos reactiva en Room con Fakes

En el desarrollo de aplicaciones móviles es muy común utilizar bases de datos para almacenar y gestionar la información que se utiliza en la aplicación. En el caso de Android, una de las opciones más populares es Room, una librería de persistencia de datos que...

Flows de Kotlin para implementar búsquedas en tiempo real

Flows de Kotlin para implementar búsquedas en tiempo real

En Android, los Flows de Kotlin son una manera de representar secuencias de datos asincrónicas que emiten valores de forma continua. Estos Flows pueden ser útiles en situaciones en las que deseamos escuchar eventos y procesar los resultados de forma asíncrona, como en...

0 comentarios

Enviar un comentario

Los datos personales que proporciones a través de este formulario quedarán registrados en un fichero de DevExpert, S.L.U., con el fin de gestionar los comentarios que realizas en este blog. La legitimación se realiza a través del consentimiento de la parte interesada. Si no se acepta, no podrás comentar en este blog. Los datos que proporciona solo se utilizan para evitar el correo no deseado y no se usarán para nada más. Puede ejercer los derechos de acceso, rectificación, cancelación y oposición en contacto@devexperto.com.

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Acepto la política de privacidad *