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:
- GET per accedere ad una risorsa;
- PUT per creare una nuova risorsa;
- POST/PATCH per modificare i valori di risorse preesistenti;
- DELETE per cancellare dei dati;
Per poter utilizzarla libreria bisogna aggiungere alle 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:
.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.
@PUT("/example/api/user/register")
User registerUser(@Body User user);
@GET("/example/api/user")
User getUser(@Query("user_id") int userId, 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:
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:
- 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, Callbackresponse);
} - Si setta un listener sul bottone e si creare un RestAdapter con l’url base:
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint(URL_BASE).build(); - Si crea un Service per l’adapter con la nostra interfaccia:
gitApi gitApi_reference = restAdapter.create(gitApi.class); - 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 POJOtv.setText("Github Name :"+gitmodel.getName() +
"\nWebsite :"+gitmodel.getBlog()+
"\nCompany Name :"+gitmodel.getCompany());
} - 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.