OkHttp para Kotlin: guia completo com exemplos

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

O que é OkHttp e para que serve?

\n\n

OkHttp é uma biblioteca HTTP poderosa e eficiente para JVM (Java Virtual Machine), Android e Kotlin/Native, desenvolvida pela empresa Square. Ela fornece uma API conveniente para realizar requisições HTTP e processar respostas. OkHttp é o padrão de facto para trabalhar com rede no ecossistema Android e é ativamente utilizado em aplicações Kotlin no lado do servidor.

\n\n

Por que usar OkHttp em vez das ferramentas padrão do Java (HttpURLConnection)?

\n
    \n
  • Simplicidade e praticidade: Uma API limpa e fluente (fluent), fácil de ler e escrever.
  • \n
  • Desempenho: Suporte nativo a HTTP/2, compressão automática de respostas (gzip), pool de conexões (connection pooling) e cache.
  • \n
  • Confiabilidade: Reenvio automático de requisições em caso de falhas de rede, resiliência a erros de DNS e TLS.
  • \n
  • Flexibilidade: Interceptadores (interceptors) facilmente configuráveis para logging, autenticação, modificação de requisições e respostas.
  • \n
  • Testabilidade: Possibilidade de substituir a camada de rede usando MockWebServer.
  • \n
\n\n

OkHttp é ideal para aplicações Android, clientes de API REST, microsserviços e qualquer outro projeto em Kotlin que exija uma comunicação HTTP rápida e confiável.

\n\n

Instalação

\n\n

OkHttp é distribuído através do Maven Central. Para adicioná-lo ao projeto, utilize o sistema de build Gradle (o mais comum para Kotlin).

\n\n

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

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

Para projeto 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: Certifique-se de que a versão do OkHttp é compatível com a sua versão do Kotlin. A versão mais recente pode sempre ser encontrada no MVNRepository.

\n\n

Início rápido

\n\n

O exemplo mais simples é executar uma requisição GET e obter o corpo da resposta como uma string.

\n\n
import okhttp3.OkHttpClient\nimport okhttp3.Request\nimport java.io.IOException\n\nfun main() {\n    // 1. Criamos o cliente (geralmente um para toda a aplicação)\n    val client = OkHttpClient()\n\n    // 2. Construímos a requisição\n    val request = Request.Builder()\n        .url("https://api.github.com/users/octocat")\n        .build()\n\n    // 3. Executamos a requisição de forma síncrona (bloqueia a thread atual)\n    client.newCall(request).execute().use { response ->\n        if (!response.isSuccessful) {\n            throw IOException("Código inesperado $response")\n        }\n        // 4. Obtemos o corpo da resposta\n        println(response.body?.string())\n    }\n}
\n\n

Explicação:

\n
    \n
  1. OkHttpClient() — cria uma instância do cliente. Ela é thread-safe, portanto, recomenda-se criar uma única instância e reutilizá-la.
  2. \n
  3. Request.Builder() — utiliza o padrão "Builder" para configurar a requisição.
  4. \n
  5. client.newCall(request) — cria uma nova chamada (Call), que pode ser executada de forma síncrona (execute()) ou assíncrona (enqueue()).
  6. \n
  7. response.use { ... } — garante que os recursos da resposta (corpo, conexão) sejam fechados após o uso.
  8. \n
  9. response.body?.string

Recommendations