Sobes.tech
Junior

Qu'est-ce que Retrofit et comment est-il utilisé dans le développement Android?

sobes.tech IA

Réponse de l'IA

Retrofit est un client type-safe pour les requêtes HTTP sous Android et Java. Il simplifie l'interaction avec les API REST en utilisant des annotations pour décrire les requêtes.

Principaux avantages:

  • Sécurité de type: Les requêtes et réponses sont représentées sous forme d'objets Java (ou Kotlin), ce qui réduit les erreurs à l'exécution.
  • Facilité d'utilisation: Déclarer les méthodes HTTP avec des annotations rend le code plus lisible et maintenable.
  • Configurabilité: Il est facile d'ajouter des interceptors pour la journalisation, l'authentification, etc.
  • Intégration avec des convertisseurs: Supporte différents convertisseurs pour parser les réponses (JSON, XML, etc.) dès la sortie.

Utilisation:

  1. Ajouter des dépendances:

    // build.gradle (niveau app)
    dependencies {
        implementation 'com.squareup.retrofit2:retrofit:<latest_version>'
        // Choisissez un convertisseur pour vos données (exemple avec Gson)
        implementation 'com.squareup.retrofit2:converter-gson:<latest_version>'
    }
    
  2. Définir l'interface API: Créez une interface Java/Kotlin déclarant tous les endpoints de l'API avec des annotations.

    // ApiService.java
    import retrofit2.Call;
    import retrofit2.http.GET;
    import retrofit2.http.Path;
    import java.util.List;
    
    public interface ApiService {
    
        @GET("users/{userId}") // requête GET à l'URL "users/{userId}"
        Call<User> getUser(@Path("userId") int userId); // @Path pour insérer la valeur dans l'URL
    
        @GET("posts") // requête GET à l'URL "posts"
        Call<List<Post>> getPosts();
    }
    
    // User.java (exemple POJO pour la réponse)
    public class User {
        private int id;
        private String name;
        // getters et setters
    }
    
    // Post.java (exemple POJO pour la réponse)
    public class Post {
        private int id;
        private int userId;
        private String title;
        private String body;
        // getters et setters
    }
    
  3. Créer une instance 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 de base de votre API
        private static Retrofit retrofit;
    
        public static Retrofit getRetrofitInstance() {
            if (retrofit == null) {
                retrofit = new Retrofit.Builder()
                        .baseUrl(BASE_URL) // Définir l'URL de base
                        .addConverterFactory(GsonConverterFactory.create()) // Ajouter le convertisseur
                        .build();
            }
            return retrofit;
        }
    
        public static ApiService getApiService() {
            return getRetrofitInstance().create(ApiService.class); // Créer une instance du service API
        }
    }
    
  4. Exécuter les requêtes:

    // Dans Activity, Fragment ou ViewModel
    import retrofit2.Call;
    import retrofit2.Callback;
    import retrofit2.Response;
    
    // ...
    
    ApiService apiService = RetrofitClient.getApiService();
    
    // Requête asynchrone pour obtenir un utilisateur par ID
    Call<User> userCall = apiService.getUser(1);
    userCall.enqueue(new Callback<User>() { // enqueue pour exécution asynchrone dans un autre thread
        @Override
        public void onResponse(Call<User> call, Response<User> response) {
            if (response.isSuccessful() && response.body() != null) {
                User user = response.body();
                // Traiter l'utilisateur reçu
            } else {
                // Traiter l'erreur (par ex. response.code(), response.errorbody())
            }
        }
    
        @Override
        public void onFailure(Call<User> call, Throwable t) {
            // Traiter l'erreur réseau ou autre exception
            t.printStackTrace();
        }
    });
    
    // Requête asynchrone pour obtenir la liste des 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();
                // Traiter la liste des posts
            } else {
                // Traiter l'erreur
            }
        }
    
        @Override
        public void onFailure(Call<List<Post>> call, Throwable t) {
            // Traiter l'erreur
            t.printStackTrace();
        }
    });
    

Retrofit abstrait les détails bas niveau du travail avec HTTP, permettant de se concentrer sur la logique de l'application.