OkHttp para Kotlin: guía completa con ejemplos

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

¿Qué es OkHttp y para qué sirve?

\n\n

OkHttp es una potente y eficiente biblioteca HTTP para JVM (Java Virtual Machine), Android y Kotlin/Native, desarrollada por la empresa Square. Proporciona una API conveniente para realizar solicitudes HTTP y procesar respuestas. OkHttp es el estándar de facto para trabajar con redes en el ecosistema Android y se utiliza activamente en aplicaciones Kotlin del lado del servidor.

\n\n

¿Por qué usar OkHttp en lugar de las herramientas estándar de Java (HttpURLConnection)?

\n
    \n
  • Simplicidad y comodidad: Una API limpia y fluida (fluent) que es fácil de leer y escribir.
  • \n
  • Rendimiento: Soporte integrado para HTTP/2, compresión automática de respuestas (gzip), grupo de conexiones (connection pooling) y almacenamiento en caché.
  • \n
  • Fiabilidad: Reintentos automáticos de solicitudes en caso de fallos de red, resistencia a errores de DNS y TLS.
  • \n
  • Flexibilidad: Interceptores (interceptors) fácilmente configurables para registro, autenticación, modificación de solicitudes y respuestas.
  • \n
  • Capacidad de prueba: Posibilidad de reemplazar la capa de red con MockWebServer.
  • \n
\n\n

OkHttp es ideal para aplicaciones Android, clientes de API REST, microservicios y cualquier otro proyecto en Kotlin que requiera un trabajo con HTTP fiable y rápido.

\n\n

Instalación

\n\n

OkHttp se distribuye a través de Maven Central. Para agregarlo a un proyecto, utilice el sistema de compilación Gradle (el más común para Kotlin).

\n\n

Para un proyecto Android / Kotlin/JVM (build.gradle.kts):

\n
dependencies {\n    implementation("com.squareup.okhttp3:okhttp:4.12.0")\n    // Para registro (opcional)\n    implementation("com.squareup.okhttp3:logging-interceptor:4.12.0")\n}
\n\n

Para un proyecto Android / Kotlin/JVM (build.gradle):

\n
dependencies {\n    implementation 'com.squareup.okhttp3:okhttp:4.12.0'\n    implementation 'com.squareup.okhttp3:logging-interceptor:4.12.0'\n}
\n\n

Para Maven (pom.xml):

\n
<dependency>\n    <groupId>com.squareup.okhttp3</groupId>\n    <artifactId>okhttp</artifactId>\n    <version>4.12.0</version>\n</dependency>
\n\n

Importante: Asegúrese de que la versión de OkHttp sea compatible con su versión de Kotlin. La versión actualizada siempre se puede encontrar en MVNRepository.

\n\n

Inicio rápido

\n\n

El ejemplo más simple es realizar una solicitud GET y obtener el cuerpo de la respuesta como una cadena.

\n\n
import okhttp3.OkHttpClient\nimport okhttp3.Request\nimport java.io.IOException\n\nfun main() {\n    // 1. Creamos el cliente (normalmente uno para toda la aplicación)\n    val client = OkHttpClient()\n\n    // 2. Construimos la solicitud\n    val request = Request.Builder()\n        .url("https://api.github.com/users/octocat")\n        .build()\n\n    // 3. Ejecutamos la solicitud de forma síncrona (bloquea el hilo actual)\n    client.newCall(request).execute().use { response ->\n        if (!response.isSuccessful) {\n            throw IOException("Código inesperado $response")\n        }\n        // 4. Obtenemos el cuerpo de la respuesta\n        println(response.body?.string())\n    }\n}
\n\n

Explicación:

\n
    \n
  1. OkHttpClient() — crea una instancia del cliente. Es seguro para subprocesos, por lo que se recomienda crear una única instancia y reutilizarla.
  2. \n
  3. Request.Builder() — utiliza el patrón "Constructor" (Builder) para configurar la solicitud.
  4. \n
  5. client.newCall(request) — crea una nueva llamada (Call) que se puede ejecutar de forma síncrona (execute()) o asíncrona (enqueue()).
  6. \n
  7. response.use { ... } — garantiza que los recursos de la respuesta (cuerpo, conexión) se cierren después de su uso.
  8. \n
  9. response.body?.string

Recommendations