Retrofit per utilizzare i servizi Rest in Android e Java

Effettuare le operazioni CRUD di GET, POST, POST/PATCH e DELETE in Android e Java grazie alla libreria Retrofit sviluppata da Square

Retrofit è una libreria Android che consente di utilizzare come protocollo di comunicazione i servizi REST, un tipo di architettura software che utilizza il protocollo HTTP per effettuare richieste al server tramite le operazioni CRUD:

  1. GET per accedere ad una risorsa;
  2. PUT per creare una nuova risorsa;
  3. POST/PATCH per modificare i valori di risorse preesistenti;
  4. DELETE per cancellare dei dati;

Per poter utilizzarla libreria bisogna aggiungere alle dependencies:

  dependencies {
    compile 'com.squareup.retrofit:retrofit:1.6.1'
    compile 'com.google.code.gson:gson:2.3'
    compile 'org.parceler:parceler:0.2.13'
  }


La libreria utilizza un convertitore del formato JSON chiamato GSON per il parsing automatico, invece Parceler serve per la serializzazione e la deserializzazione degli ogetti.

La struttura base per richiedere una Rest API è costituita dai seguenti file:

  • Un’interfaccia per gestire le query (GET, POST, ecc.) in una classe Service;
  • Un modello per recuperare le risposte API (POJOs). Il codice JSON recuperato dal server verrà aggiunto a questa classe;
  • Una classe RestlClient per fare le chiamate.

Per poter utilizzare le operazioni CRUD è necessario comporre degli URL, la cui struttura è definita utilizzando l’oggetto Retrofit in cui viene definito il baseUrl:

    Retrofit retrofit = new Retrofit.Builder()
      .baseUrl("https://api.datrevo.com/")
      .build();

    DatrevoApiService service = retrofit.create(DatrevoApiService.class);

Il baseUrl viene utilizzato come “indirizzo base” per le chiamate da effettuare in modo da non dover scriver per intero l’intero url dell’api da chiamare ma sarà costruito dinamicamente dal baseUrl unito all’url dell’api.

Le operazioni CRUD possono essere definite di tipo sincrono se gli si aggiunge un tipo di ritorno, al contrario, se viene definita una callback saranno di tipo asincrono.

    public interface ApiService {
      @PUT("/example/api/user/register")
      User registerUser(@Body User user);
      @GET("/example/api/user")
      User getUser(@Query("user_id") int userId, Callback callback);
    }

Tramite le annotazioni è possibile effettuare delle richieste, manipolare l’url, specificare degli header e aggiungere parametri query. Ad esempio, per modificare l’url da richiamare è possibile specificare un parametro (racchiuso tra parentesi graffe) che sarà poi sostituito all’invocazione del metodo dal parametro passato. Ad esempio:

    @GET("/example/api/user/{id}")
    User getUserById(@Path("user_id") int userId);

Il valore di {id} sarà sostituito dal parametro user_id passato al metodo getUserById().

Per maggiori informazioni vi rimando al sito ufficiale di Retrofit e al progetto su GitHub.

Ecco un esempio di come utilizzare la libreria Retrofit in Android tratto da themakeinfo.com:

  1. Si crea un’interfaccia in cui si definiscono le url calling che restituiranno oggetti JSON da salvare in POJOs. Ad esempio:

      public interface gitApi {
        @GET("/user/{user}")
        public void getFeed(@Path("user" String user, Callback response);
      }

    In GET abbiamo l’indirizzo da aggiungere all’URL base (definito nella nostra classe) che contatterà il server, {user} è la stringa ottenuta da un’EditText.

  2. Si setta un listener sul bottone e si creare un RestAdapter con l’url base:

      RestAdapter restAdapter = new RestAdapter.Builder()
            .setEndpoint(URL_BASE).build();

  3. Si crea un Service per l’adapter con la nostra interfaccia:

      gitApi gitApi_reference = restAdapter.create(gitApi.class);

  4. Adesso bisogna effettuare la chiamata usando Gson per la conversione JSON-POJO in cui possiamo richiamare ogni singolo elemento:

      gitApi_reference.getFeed(user, new Callback() {
        @Override
        public void success(gitmodel gitmodel, Response response) {
          // Abbiamo l'ggetto JSON dal serve al nostro POJO

          tv.setText("Github Name :"+gitmodel.getName() +
              "\nWebsite :"+gitmodel.getBlog()+
              "\nCompany Name :"+gitmodel.getCompany());
        }

  5. Si definisce un messaggio d’errore per eventuali errori:

      @Override
      public void failure(RetrofitError error) {
        tv.setText(error.getMessage());
      }

Per approfondire Android ecco la guida completa completa: Guida Android.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *