Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

La libreria Retrofit

Analizziamo il funzionamento di Retrofit, una libreria Java per le applicazioni Android per la gestione dei servizi REST.
Analizziamo il funzionamento di Retrofit, una libreria Java per le applicazioni Android per la gestione dei servizi REST.
Link copiato negli appunti

Su piattaforma Android, parlare di servizi Web equivale a parlare di servizi REST. Non è obiettivo di questa guida parlare dei principi base dei servizi REST e delle differenze con i servizi SOAP. Per maggiori informazioni sui concetti base dei REST service si rimanda ad altri altri articoli come questo.

L'SDK di Android contiene ovviamente alcune classi atte a supportare la comunicazione mediante HTTP, alla base dei servizi REST. Esistono ovviamente diverse librerie open source scritte in Java che offrono supporto a tal fine.

La libreria che andremo a vedere in questa guida è una tra le più famose e si chiama Retrofit. Essa consente di accedere ai servizi REST semplicemente decorando con opportune annotazioni i metodi delle interfacce che rappresentano i servizi da utilizzare. Ecco un client REST definito con una delle annotazioni di Retrofit:

public interface UserRestService {
@GET("users")
Call<List<User>> listUsers();
}

In questo codice d'esempio abbiamo definito un metodo GET per recuperare una lista di oggetti User.

Retrofit: setup

Per poter utilizzare Retrofit nel suo funzionamento base è sufficiente includere la libreria tra le dipendenze del progetto.

dependencies {
..
implementation 'com.squareup.retrofit2:retrofit:2.3.0'
..
}

Retrofit da sola però non è in grado di gestire la deserializzazione del body della risposta HTTP, che normalmente contiene l'oggetto o gli oggetti che si richiedono mediante il servizio Web. Retrofit si integra con molte librerie di conversione tra JSON e Java. Tra queste possiamo annoverare anche Kripton che abbiamo visto nei paragrafi precedenti.

Libreria di persistenza Dipendenza da includere
Kripton implementation group: 'com.abubusoft', name: 'kripton-retrofit-converter', version: '3.1.0'
Gson implementation group: 'com.squareup.retrofit2', name: 'converter-gson', version: '2.3.0'
Jackson implementation group: 'com.squareup.retrofit2', name: 'converter-jackson', version: '2.3.0'
Moshi implementation group: 'com.squareup.retrofit2', name: 'converter-moshi', version: '2.3.0'
Protobuf implementation 'com.squareup.retrofit2', name: 'converter-protobuf', version: '2.3.0'
Wire implementation group: 'com.squareup.retrofit2', name: 'converter-wire', version: '2.3.0'
Simple XML implementation group: 'com.squareup.retrofit2', name: 'converter-simplexml', version: '2.3.0'

Personalmente ho utilizzato l'integrazione con Kripton e quella con Gson.

Retrofit: esempio d'uso

Per meglio illustrare il funzionamento di Retrofit faremo riferimento ai servizi REST esposti dal sito jsonplaceholder. Nello specifico andiamo a realizzare con Retrofit il client del servizio REST con URI: https://jsonplaceholder.typicode.com/users

Il servizio REST fornisce una risposta JSON simile a quella riportata nell'immagine seguente:

Una possibile rappresentazione mediante classi Java dei dati recuperati dal servizio REST è data dalle seguenti classi (nel codice, per migliorare la leggibilità, sono stati omessi setter e i getter):

public class User {
private String id;
private String phone;
private String username;
private String website;
private Address address;
private String email;
private Company company;
private String name;
}
public class Company {
private String catchPhrase;
private String name;
private String bs;
}
public class Address {
private Geo geo;
private String zipcode;
private String street;
private String suite;
private String city;
}
public class Geo {
private String lng;
private String lat;
}

La definizione del client REST per accedere servizio sopra descritto è data dalla seguente interfaccia

public interface UserRestService {
@GET("users")
Call<List<User>> listUsers();
}

Retrofit per dichiarare un client REST necessita solo dell'interfaccia e all'avvio dell'applicazione è necessario inizializzare la libreria:

// inizializziamo la libreria
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://jsonplaceholder.typicode.com/")
.build();
// istanziamo il client REST
UserService userService = retrofit.create(UserService.class);

L'istanza di Retrofit viene costruita con il pattern builder, specificando come informazione di minima l'URL di base del server che espone i servizi. Nel caso preso in questione, https://jsonplaceholder.typicode.com/.

Ti consigliamo anche