Cliente HTTP em Kotlin: fazendo requisições corretamente com ktor e OkHttp

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



O desenvolvimento moderno para Android e serviços backend em Kotlin raramente acontece sem interação com APIs remotas. Criar um cliente HTTP confiável é uma tarefa básica, da qual depende a estabilidade de toda a aplicação. Neste artigo, vamos analisar como fazer requisições HTTP em Kotlin, usando as duas bibliotecas mais populares: Ktor Client e OkHttp. Você aprenderá como enviar requisições GET e POST, processar JSON, gerenciar erros e escrever código limpo e sustentável.



Por que o Ktor Client é a escolha do desenvolvedor Kotlin moderno



Ktor Client é um cliente HTTP assíncrono, criado especificamente para Kotlin pela equipe JetBrains. Ele suporta totalmente coroutines, tornando o código conciso e seguro. Ao contrário do OkHttp, o Ktor foi projetado desde o início com suporte multiplataforma: o mesmo código funciona em Android, iOS, JVM, JS e Native.



Instalação de dependências

Para trabalhar com o Ktor Client, adicione as seguintes dependências no arquivo build.gradle.kts:

dependencies {    // Cliente base    implementation("io.ktor:ktor-client-core:2.3.7")    // Engine para JVM (OkHttp ou CIO)    implementation("io.ktor:ktor-client-okhttp:2.3.7")    // Para serialização 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")}


Requisição GET simples

Vamos criar um cliente HTTP e executar uma requisição GET para uma API de teste (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 { // Configuração base engine { // Configurações do engine OkHttp } } val response: HttpResponse = client.get("https://jsonplaceholder.typicode.com/users/$userId") return response.bodyAsText()}

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

Observe: fetchUser é uma função suspend. Isso permite chamá-la a partir de uma coroutine sem bloquear a thread.



Requisição POST com corpo JSON

Para enviar dados no formato JSON, vamos conectar o plugin ContentNegotiation e definir uma 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.Serializableimport kotlinx.serialization.json.Json

@Serializabledata 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 perfeitamente!") val createdPost = createPost(newPost) println(createdPost)}

Ponto chave: o plugin ContentNegotiation serializa automaticamente o objeto para JSON e desserializa a resposta de volta para a data class.



OkHttp — o padrão comprovado para Android

OkHttp continua sendo o padrão de facto para requisições de rede no desenvolvimento Android. Ele é rápido, confiável e suporta p

Blogs

Book Recommendations