Communiquez avec votre serveur avec Retrofit2

Dans le monde du mobile, la concurrence est atroce, ce qui nous incite à faire appel aux nouvelles technologies et à tout outil qui contribuera à une meilleure gestion de notre projet. C’est d’ailleurs l’un des points forts qui distinguent Geoks et confirment son adaptation au marché et son intégration souple des nouveautés. Retrofit2 fut donc l’un des outils auxquels nous avons eu recours pour le développement de Soshop. Un choix pertinent, et vous allez voir pourquoi.

En effet, une application Android manipule souvent des données externes fournies par un serveur. Afin de mieux faciliter cette communication, il est recommandé de faire appel à des Framework ou librairies qui se chargeront de faire le traitement en dissimulant les complexités.

Dans notre cas, la réception des données en format JSON ou XML, de les analyser et de les parser pour chaque requête c’est du travail !

Plus concrètement le traitement de ces webservices en API REST se font à travers des URL nécessitant de

1. Construire et appeler URL
2. Récupérer le contenu de la page
3. Analyser et parser les données

Square a pensé à vous et a donné naissance à Retrofit, un Type safe REST Client1 destiné aux développeurs sous Android et Java.

Cet outil nous permet ainsi de gérer la communication avec le serveur en interagissant facilement avec des interfaces Java ce qui offre à l’utilisateur une abstraction des complexités d’échange de flux de données grâce à un client http, et de conversion des objets vers leur représentation JSON ou XML et inversement.

Son intégration des librairies Okio, OkHttp et Moshi a fait de lui un outil complet combinant les actions de lecture, d’écriture, de conversion et d’interception des flux et compatible aux dernières versions et d’éviter certains bugs.

Avant de s’y mettre, et comme toute librairie, il est nécessaire d’ajouter la dépendance avec

compile ‘com.squareup.retrofit2:retrofit:2.0.2’
compile ‘com.squareup.retrofit2:converter-gson:2.0.2’

Ensuite, étant donné que nous travaillons avec un serveur auquel nous envoyons des requêtes http, cette procédure nécessite évidemment le passage par des sockets, ce qui justifie le besoin de la permission d’internet. Il suffit donc d’ajouter cette ligne à notre AndroidManifest.xml

<uses-permission android:name=”android.permission.INTERNET” />

Puis, construire un Retrofit object pour intégrer les communications http, et y indiquer le endpoint (l’url) d’accès.

Une fois ces préparations d’environnement faites, nous allons creuser dans la communication avec le serveur.

Il faut savoir que l’appel des web services est spécifié par un objet Call représentant les services Retrofit. La manipulation de ces données est précédée par des annotations définissant la méthode d’appel :
@GET 
@POST 
@PUT 
@DELETE 
@PATCH
Puis l’url de la méthode à appeler qui s’ajoute à l’url de base de l’application en spécifiant les paramètres, s’il y on a, avec @Path, @Query, @Field …

Je récapitule alors à travers ce petit exemple tiré d’un projet que j’ai réalisé chez Geoks

L’objet Call encapsule donc l’appel et la réponse obtenue. En effet, dans cet exemple la réponse est définie par l’interface OffersResponse qui retourne une liste d’offres.

Sinon, de façon classique, si vous le préférez, nous pouvons se passer de la création d’une l’interface supplémentaire et définir plutôt une liste d’offre avec Call<List<OfferModel>>

Et si on veut creuser un peu plus dans les possibilités de Retrofit, et si vous êtes fan de la programmation réactive ou vous êtes curieux de découvrir cette nouvelle approche de développement, vous pouvez aussi substituer l’objet Call avec les Observable de RxJava par la syntaxe suivante

Passons maintenant à l’interception des données.

Comme j’ai déjà mentionné au début, la récupération des réponses web services sont interprétées comme étant des objets Java représentés par un type Response.

Ce Callback reçu nous distingue deux possibilités de retour, onResponse en cas de succès, et c’est dedans qu’on définit le traitement demandé, et onFailure sinon, qui relève généralement une exception.

Autre que l’interception des flux de données, un mécanisme d’analyse et d’interprétation se déclenche.

Certes, toute sorte de communication se base sur un langage commun, pareil donc pour une communication entre le client http et le serveur, un compromis entre l’objet Java et le format standard est demandé.

La puissance de Retrofit s’accentue sur sa capacité de conversion sous plusieurs formats dans les deux sens. Moshi, un parseur Json-Object, qui en fait partie et qui est considéré comme une composante de base de Retrofit. Lors de son analyse cette librairie n’a pas à allouer de la mémoire ni de recopier les données ce qui allège le traitement. La désérialisation de l’objet à injecter est réalisée par GSON en associant les noms des attributs à leurs correspondances en champs de l’objet JSON.

Profitons alors de Retrofit2 pour mieux communiquer avec notre API Rest.

1 Type safety assure que le compilateur valide le code lors de la compilation.

Mes sources :
https://futurestud.io/tutorials/retrofit-getting-started-and-android-client
http://tutos-android-france.com/retrofit-webservices-rest/
http://mathias-seguy.developpez.com/tutoriels/android/utiliser-retrofit/

Ghada, développeuse Android Junior chez Geoks