Aula 10 - APIs REST & Retrofit 🌍
📡 O App e a Internet
Raramente um app vive sozinho. Ele precisa de dados externos.
- Previsão do tempo.
- Posts de redes sociais.
- Salvar pedidos em um servidor.
🍕 O Conceito de API REST
Pense em um restaurante (Servidor) e você (Cliente).
- Request: Você pede um prato.
- Endpoint: A mesa do restaurante (
/pedidos). - Response: O prato chega (JSON).
O Formato JSON 📦
É como o mundo troca dados hoje.
🚀 Conheça o Retrofit
A biblioteca da Square que é o padrão absoluto no Android.
- Transforma APIs em interfaces Kotlin.
- Faz o "parse" do JSON automaticamente.
- Suporte nativo a Coroutines.
🔨 Implementação em 3 Passos
1. A Data Class (O Modelo)
Deve ser o espelho do JSON.
2. A Interface (O Contrato)
interface ApiService {
@GET("posts")
suspend fun obterPosts(): List<Post>
@GET("posts/{id}")
suspend fun obterPostUnico(@Path("id") id: Int): Post
}
3. A Instância (O Cliente)
val retrofit = Retrofit.Builder()
.baseUrl("https://jsonplaceholder.typicode.com/")
.addConverterFactory(GsonConverterFactory.create())
.build()
val api = retrofit.create(ApiService::class.java)
🧠 Chamando na ViewModel
Nunca trave a UI Thread!
viewModelScope.launch {
try {
val lista = api.obterPosts()
_posts.value = lista
} catch (e: Exception) {
// Tratar erro (falta de internet, 404...)
}
}
🔐 Autenticação (JWT Tokens)
A maioria das APIs exige login.
- Bearer Token: Um código que você envia no Header.
- Interceptor: Adiciona o token em TODAS as chamadas automaticamente.
🆚 Android vs iOS (Rede)
| Recurso | Android (Retrofit) | iOS (URLSession) |
|---|---|---|
| Linguagem | Interface + Annotations | Native Classes / URLRequest |
| Conversão | Gson / Moshi | Codable |
| Async | Coroutines (suspend) | Async / Await |
🌐 Permissão de Internet
No AndroidManifest.xml:
Esqueceu? O App crasha com SecurityException. 💥
🛠️ Ferramentas de Apoio
- Postman / Insomnia: Teste sua API antes de codar.
- JSON Placeholder: APIs falsas gratuitas para teste.
- QuickType.io: Gera a Data Class Kotlin direto do JSON.
🧪 Desafio da Aula: App de Repositórios
- Use a API pública do GitHub:
https://api.github.com/users/{seuUser}/repos. - Crie a Data Class e a Interface.
- Exiba o nome dos seus repositórios em uma
RecyclerView.
⚠️ Cuidado com o Main Thread
O Android não permite rede na Main Thread.
Sempre use viewModelScope.launch ou troque o Dispatcher para Dispatchers.IO.
🏁 Conclusão
- APIs conectam seu app ao mundo.
- Retrofit + Gson = Produtividade máxima.
- Atenção às permissões e erros de rede.