09/12/2022
Institut Supérieur des Etudes Technologiques de Béja
DÉVELOPPEMENT MOBILE
Enseignante: Mme. Haïfa Chorfi
CHAPITRE 2 : Persistance des données
Consommer un Web Service REST avec Retrofit
Niveau : SEM3
42 Mme. HAIFA CHORFI
42
Interaction avec une base de données distante via http, php, webservice…
43 Mme. HAIFA CHORFI
43
Mme Haifa Chorfi 1
09/12/2022
API : Application Programming Interface
Une API est une interface d'un programme applicatif informatique.
Elle permet d'offrir des services et des ressources d'un système déjà
existant.
Ces ressources sont des données exposées selon certaines conditions
définies par le développeur.
44 Mme. HAIFA CHORFI
44
API : Application Programming Interface
Les services sur Internet sont accessibles par des interfaces
Il existe 2 grandes familles dans ce domaine :
REST : Architecture orientée ressource, une API REST offre une
interface simple et uniforme. Elle est particulièrement bien adaptée au
web mais elle n'en est pas dépendante. Sa souplesse et sa mise en place
rapide est une très grande force par rapport à son concurrent direct.
SOAP : Permet la transmission de messages entre des objets distants. Il
est alors possible à un objet d'appeler directement des méthodes sur un
serveur. Cependant, il est bâti sur l'XML et moins sur le JSON,
"nouveau" format de données particulièrement utilisé par REST.
45 Mme. HAIFA CHORFI
45
Mme Haifa Chorfi 2
09/12/2022
Exemple
Une application android a souvent besoin d’une source de données
externe, par exemple un site web avec lequel elle va échanger des
données.
Exemple de l’application youtube, qui va interagir avec les serveurs de
google afin de récupérer une liste de vidéos.
L’application n’accède pas directement aux données via des requêtes SQL
Le serveur met à disposition une liste d’url par lesquels les applications
vont pouvoir accéder aux données. Le format des données échangées se
fait le plus souvent en JSON ou en XML.
On dit alors que le serveur fournit un webservice, dans notre cas
une API REST.
46 Mme. HAIFA CHORFI
46
Librairies sous Android
Sous Android, plusieurs bibliothèques réseau qui récupéraient et
envoyaient les données depuis/vers le serveur
3 techniques principalement utilisées pour la mise en œuvre des API:
AsyncTask: des tâches asynchrones intégrées pour extraire les
données des serveurs
Volley : une bibliothèque à code source ouvert écrite par Google qui
prend en charge les threads d'arrière-plan simultanés, la mise en cache
réseau, ainsi que d'autres fonctionnalités permettant de nettoyer le
code réseau de manière substantielle.
Retrofit : une bibliothèque à code source ouvert écrite par Square de
même que Volley
47 Mme. HAIFA CHORFI
47
Mme Haifa Chorfi 3
09/12/2022
Tests de performance Android Async vs Volley vs Retrofit
Comparer avecVolley et AsyncTask, Retrofit offrant une réponse très
rapide à la demande.
48 Mme. HAIFA CHORFI
48
Retrofit
La plupart des applications mobiles consomment des API REST JSON
pour récupérer toutes les données nécessaires à leur fonctionnement
Retrofit est extrêmement simple à utiliser. Il vous permet essentiellement
de traiter les appels d'API comme de simples appels de méthode Java,
de sorte que vous ne définissez que les URL à atteindre et les types de
paramètres de demande / réponse en tant que classes Java.
49 Mme. HAIFA CHORFI
49
Mme Haifa Chorfi 4
09/12/2022
Retrofit
Retrofit est une librairie qui permet d’accéder simplement à des services
Web basé sur REST et plus particulièrement dans le cadre d’API JSON.
Elle permet de gérer l’envoi des requêtes et la réception des réponses
jusqu’à leur conversion sous forme d’objets.
L'ensemble de l'appel réseau + l'analyse JSON / XML est entièrement
géré par Retrofit avec l'aide de Gson pour l'analyse JSON, ainsi que la
prise en charge des formats arbitraires avec sérialisation.
Elle permet de faire des requêtes HTTP, s’occupe tout seul de convertir
vos JSON dans des objets Java et vous propose une architecture adaptée
pour réagir en conséquence aux codes HTTP.
50 Mme. HAIFA CHORFI
50
JSON
JSON (JavaScript Object Notation) est un format de données qui permet
de représenter de l’information structurée sous forme de texte. Sa
représentation est plus légère que le format XML.
Exemple :Format JSON :
{"menu": {
"id": "file",
"value": "File",
"popup": {
"menuitem": [
{"value": "New", "onclick": "CreateNewDoc()"},
{"value": "Open", "onclick": "OpenDoc()"},
{"value": "Close", "onclick": "CloseDoc()"}
]
}
}}
51 Mme. HAIFA CHORFI
51
Mme Haifa Chorfi 5
09/12/2022
JSON
À titre de comparaison, le même exemple en XML :
<menu id="file" value="File">
<popup>
<menuitem value="New" onclick="CreateNewDoc()" />
<menuitem value="Open" onclick="OpenDoc()" />
<menuitem value="Close" onclick="CloseDoc()" />
</popup>
</menu>
52 Mme. HAIFA CHORFI
52
GSON
Gson est une bibliothèque Java qui peut être utilisée pour convertir des
objets Java en leur représentation JSON. Il peut également être utilisé
pour convertir une chaîne JSON en un objet Java équivalent.
53 Mme. HAIFA CHORFI
53
Mme Haifa Chorfi 6
09/12/2022
Retrofit
Pour travailler avec Retrofit, vous avez besoin de trois classes:
Classe de modèle utilisée pour mapper les données JSON.
Classe [Link] - Instance Retrofit d’une ou plusieurs interfaces
pour exécuter des requêtes vers votre serveur et d’une instance vers
cette interface.
Interfaces qui définissent les opérations HTTP possibles
54 Mme. HAIFA CHORFI
54
Retrofit
Classe de modèle : afin de sérialiser/désérialiser les requêtes/réponses
et de stocker nos données.
Chaque champ de chaque modèle doit être identique à la réponse (nom
et type) afin que la désérialisation de cette dernière fonctionne.
55 Mme. HAIFA CHORFI
55
Mme Haifa Chorfi 7
09/12/2022
Retrofit
Classe [Link] - instance de d’une ou plusieurs interfaces Java
pour exécuter des requêtes vers votre serveur et d’une instance vers
cette interface.
56 Mme. HAIFA CHORFI
56
Retrofit
Interfaces qui définissent les opérations HTTP possibles:
Chaque méthode d'une interface représente un appel API possible. Il doit
avoir une annotation HTTP ( GET, POST, etc.) pour spécifier le type de
requête et l'URL relative.
La valeur de retour enveloppe la réponse dans un Call objet avec le type
du résultat attendu.
57 Mme. HAIFA CHORFI
57
Mme Haifa Chorfi 8
09/12/2022
Retrofit
Chaque méthode d'une interface représente un appel API possible.
Il doit avoir une annotation HTTP ( GET, POST, etc.) pour spécifier le
type de demande et l'URL relative.
La valeur de retour encapsule la réponse dans un objet Call avec le type
du résultat attendu
Les méthodes suivantes sont disponibles : @GET, @POST, @PUT,
@DELETE, @PATCH
58 Mme. HAIFA CHORFI
58
Retrofit
59 Mme. HAIFA CHORFI
59
Mme Haifa Chorfi 9
09/12/2022
Étapes à suivre pour intégrer Retrofit
1. Ajouter les dépendances nécessaires pour utiliser Retrofit dans Gradle:
[Link]:(Module)
2. Déclarer une permission pour accéder à Internet : définir une autorisation
Internet dans notre fichier Manifest.
[Link]
60 Mme. HAIFA CHORFI
60
Étapes à suivre pour intégrer Retrofit
3. Créer une classe de modèle
Java\...\[Link]
61 Mme. HAIFA CHORFI
61
Mme Haifa Chorfi 10
09/12/2022
Étapes à suivre pour intégrer Retrofit
4. Créer l'instance Retrofit pour envoyer les requêtes réseau
Java\...\[Link]
62 Mme. HAIFA CHORFI
62
Étapes à suivre pour intégrer Retrofit
5. Configuration de l'interface de Retrofit avec une méthode
Cette méthode est annotée par @Get(« [Link]") pour informer
Retrofit que la requête HTTP doit se faire en GET et que l’URL se termine
par " [Link]".
La méthode doit retourner Call<List<Smartphone>>.
Call est une interface de Retrofit qui permet d’exécuter en synchrone ou
asynchrone la requête et le type générique à l’intérieur informe Retrofit du
type de retour souhaité. Java\...\[Link]
63 Mme. HAIFA CHORFI
63
Mme Haifa Chorfi 11
09/12/2022
Étapes à suivre pour intégrer Retrofit
6. Consommer le service Web REST
Java\...\[Link]
64 Mme. HAIFA CHORFI
64
Étapes à suivre pour intégrer Retrofit
7. Définir les données de réponse de retrofit dans Recyclerview
65 Mme. HAIFA CHORFI
65
Mme Haifa Chorfi 12
09/12/2022
Étapes à suivre pour intégrer Retrofit
7. Définir les données de réponse de retrofit dans Recyclerview
Java\...\[Link]
66 Mme. HAIFA CHORFI
66
Mme Haifa Chorfi 13