Junior
O que é Retrofit e como é utilizado no desenvolvimento Android?
sobes.tech IA
Resposta da IA
O Retrofit é um cliente type-safe para pedidos HTTP no Android e Java. Simplifica a interação com APIs REST usando anotações para descrever os pedidos.
Vantagens principais:
- Segurança de tipos: Os pedidos e respostas são apresentados como objetos Java (ou Kotlin), o que reduz erros em tempo de execução.
- Facilidade de uso: Declarar métodos HTTP com anotações torna o código mais legível e fácil de manter.
- Configurabilidade: É fácil adicionar interceptores para logging, autenticação e outras tarefas.
- Integração com conversores: Suporta diferentes conversores para parsear respostas (JSON, XML, etc.) desde o início (por exemplo, Gson, Jackson).
Uso:
-
Adicionar dependências:
// build.gradle (nível app) dependencies { implementation 'com.squareup.retrofit2:retrofit:<latest_version>' // Escolha um conversor para seus dados (exemplo para Gson) implementation 'com.squareup.retrofit2:converter-gson:<latest_version>' } -
Definir a interface API: Cria-se uma interface Java/Kotlin que declara todos os endpoints da API usando anotações.
// ApiService.java import retrofit2.Call; import retrofit2.http.GET; import retrofit2.http.Path; import java.util.List; public interface ApiService { @GET("users/{userId}") // pedido GET na URL "users/{userId}" Call<User> getUser(@Path("userId") int userId); // @Path para inserir o valor na URL @GET("posts") // pedido GET na URL "posts" Call<List<Post>> getPosts(); } // User.java (exemplo POJO para a resposta) public class User { private int id; private String name; // getters e setters } // Post.java (exemplo POJO para a resposta) public class Post { private int id; private int userId; private String title; private String body; // getters e setters } -
Criar instância de Retrofit:
// RetrofitClient.java import retrofit2.Retrofit; import retrofit2.converter.gson.GsonConverterFactory; public class RetrofitClient { private static final String BASE_URL = "https://api.example.com/"; // URL base da sua API private static Retrofit retrofit; public static Retrofit getRetrofitInstance() { if (retrofit == null) { retrofit = new Retrofit.Builder() .baseUrl(BASE_URL) // Definir URL base .addConverterFactory(GsonConverterFactory.create()) // Adicionar conversor .build(); } return retrofit; } public static ApiService getApiService() { return getRetrofitInstance().create(ApiService.class); // Criar instância do serviço API } } -
Executar pedidos:
// Em Activity, Fragment ou ViewModel import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; // ... ApiService apiService = RetrofitClient.getApiService(); // Pedido assíncrono para obter usuário por ID Call<User> userCall = apiService.getUser(1); userCall.enqueue(new Callback<User>() { // enqueue para execução assíncrona em outro thread @Override public void onResponse(Call<User> call, Response<User> response) { if (response.isSuccessful() && response.body() != null) { User user = response.body(); // Processar usuário obtido } else { // Processar erro (por exemplo, response.code(), response.errorbody()) } } @Override public void onFailure(Call<User> call, Throwable t) { // Processar erro de rede ou outra exceção t.printStackTrace(); } }); // Pedido assíncrono para obter lista de posts Call<List<Post>> postsCall = apiService.getPosts(); postsCall.enqueue(new Callback<List<Post>>() { @Override public void onResponse(Call<List<Post>> call, Response<List<Post>> response) { if (response.isSuccessful() && response.body() != null) { List<Post> posts = response.body(); // Processar lista de posts } else { // Processar erro } } @Override public void onFailure(Call<List<Post>> call, Throwable t) { // Processar erro t.printStackTrace(); } });
Retrofit abstrai os detalhes de baixo nível do trabalho com HTTP, permitindo focar na lógica da aplicação.