Cliente HTTP em Kotlin: fazendo requisições corretamente do A ao Z

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

Cliente HTTP em Kotlin: fazendo requisições corretamente do A ao Z

\n

O desenvolvimento moderno em Kotlin é impensável sem interação com servidores remotos. Seja um aplicativo móvel Android ou uma solução de servidor com Ktor — as requisições HTTP são a base da troca de dados. Neste artigo, vamos explorar como criar clientes HTTP em Kotlin, usando as melhores práticas, bibliotecas populares e uma abordagem moderna com corrotinas. Você aprenderá como fazer requisições GET e POST, tratar erros, trabalhar com JSON e construir uma arquitetura robusta de camada de rede.

\n\n

Por que Kotlin é ideal para clientes HTTP?

\n

Kotlin oferece sintaxe concisa, segurança contra nulos (null safety) e compatibilidade total com o ecossistema Java. Graças às corrotinas (coroutines), as requisições assíncronas se tornam intuitivas, sem callbacks complexos. Você pode escrever código sequencial que é executado de forma assíncrona — isso simplifica muito a leitura e a depuração. Além disso, Kotlin é amplamente utilizado no desenvolvimento Android, onde requisições de rede são tarefas diárias.

\n\n

Principais bibliotecas para HTTP em Kotlin

\n

Atualmente, as três abordagens mais populares são:

\n
    \n
  • Ktor Client — cliente multiplataforma da JetBrains. Suporta JVM, Android, iOS, JS e Native. Ideal para projetos que precisam de uma base de código unificada.
  • \n
  • OkHttp + Retrofit — stack clássico para Android/JVM. OkHttp cuida do trabalho de rede de baixo nível, enquanto Retrofit gera interfaces tipadas.
  • \n
  • Fuel — biblioteca leve com abordagem funcional. Adequada para projetos pequenos.
  • \n
\n

Neste artigo, focaremos em Ktor e OkHttp, pois eles cobrem 90% dos cenários.

\n\n

Configuração do projeto e primeiras requisições

\n

Para começar, vamos adicionar as dependências. Se você usa Gradle (Kotlin DSL), adicione o Ktor Client:

\n
dependencies {\n    implementation("io.ktor:ktor-client-core:2.3.7")\n    implementation("io.ktor:ktor-client-cio:2.3.7") // motor CIO\n    implementation("io.ktor:ktor-client-content-negotiation:2.3.7")\n    implementation("io.ktor:ktor-serialization-kotlinx-json:2.3.7")\n}
\n

Para OkHttp, as dependências serão:

\n
dependencies {\n    implementation("com.squareup.okhttp3:okhttp:4.12.0")\n    implementation("com.squareup.okhttp3:logging-interceptor:4.12.0")\n    implementation("com.google.code.gson:gson:2.10.1")\n}
\n\n

Requisição GET com Ktor Client

\n

Vamos criar um cliente simples e fazer uma requisição GET a uma API pública:

\n
import io.ktor.client.*\nimport io.ktor.client.request.*\nimport io.ktor.client.statement.*\n\nsuspend fun fetchData(): String {\n    val client = HttpClient()\n    val response: HttpResponse = client.get("https://jsonplaceholder.typicode.com/posts/1")\n    val body = response.bodyAsText()\n    client.close()\n    return body\n}\n\n// Uso em uma corrotina\nfun main() = runBlocking {\n    println(fetchData())\n}
\n

Observe: suspend é a palavra-chave do Kotlin para funções suspensíveis. Isso permite executar a requisição sem bloquear a thread.

\n\n

Requisição GET com OkHttp

\n

Um exemplo semelhante com OkHttp fica assim:

\n
import okhttp3.OkHttpClient\nimport okhttp3.Request\n\nfun fetchDataSync(): String {\n    val client = OkHttpClient()\n    val request = Request.Builder()\n        .url("https://jsonplaceholder.typicode.com/posts/1")\n        .build()\n    client.newCall(request).execute().use { response ->\n        return response.body?.string() ?: "Erro"\n    }\n}\n\n// Chamada em uma thread normal (bloqueante)\nfun main() {\n    println(fetchDataSync())\n}
\n

OkHttp é síncrono por padrão, mas pode ser facilmente adaptado para corrotinas usando suspendCancellableCoroutine.

\n\n

Requisições POST e trabalho com JSON

\n

O envio de dados é a segunda operação mais importante. Vamos ver como enviar JS

Blogs

Book Recommendations