Consumer les web services RESTFull en JAVA

De $1

Table des matières
aucun titre

Version de 15:05, 23 Avr 2024

cette version.

Revenir à liste des archives.

Voir la version actuelle

L’objectif de ces travaux est de vous montrer comment consommer un service web RESTFul à partir d'une application JAVA. L'idée est d'ouvrir une connection par HTTP au serveur et d'effectuer des opérations sur les ressources exposées en lecture (GET), écriture (DELETE, POST, PUT). 

Nous utiliserons la librairie Apache Components  qui permet d'effectuer des requetes HTTP à partir d'une application Java.  Rendez vous sur le site du projet et téléchargez la librairie sur votre poste de travail. 

Cette librairie dépend d’autres librairies, et toutes les dépendances sont fournies dans le dossier téléchargé ; ajoutez les tous en référence à votre projet.  

Bonne pratique : Créez un dossier libs dans l’arborescence de votre projet puis placez les jars à importer dans ce dossier.  En faisant ainsi, vous n’aurez pas de problème de références si jamais vous déplacez le projet vers un autre dossier ou si vous le passez à un collègue ou un prof.  

  • Créez un projet Java Application sous Netbeans 
  • Ajoutez une rérérence à la librairie que vous téléchargée précedemment 
Faites bouton doigt sur Libraries dans l’arborescence de votre projet sur  Netbeans è Add Jar/Folder 
 add_lib.pngadd_lib_1.png
  • Ouvrez la classe SimpleClient qui a été généré à la création du projet, modifiez cette classe afin qu'elle puisse accéder en lecture à la ressource "categorie" de votre service.  
//Créez un client HTTP : 
HttpClient client =new DefaultHttpClient(); 
//Créez une requete HTTP de type GET  HttpGet request =new HttpGet(url);  
//Ajoutez le type de représentation souhaitée dans l'en tête de la requête  
request.addHeader("Accept","application/xml");  
// Exécutez la requête et récupérez la réponse  HttpResponse 
response = client.execute(request);  
//Analysez le statut de la réponse   
int code = response.getStatusLine().getStatusCode());  
if(code==200){//La requete a atteint le serveur et une réponse a été renvoyée     
//Récupérez le contenu de la réponse        
BufferedReader rd =new BufferedReader();  
new InputStreamReader(response.getEntity().getContent()));   
StringBuffer result =newStringBuffer();   
String line ="";  
while((line = rd.readLine())!=null){   
result.append(line);      }   
//Afficher la réponse dans la console      
System.out.println(result.toString()); }
 else{      //Une erreur est survenue (500, 404 ...)  }
  • Exécutez le code et vérifiez que la représentation de la ressource s'affiche dans la console de Netbeans
  • Faites appel maintenant à vos connaissances XML pour parser la réponse du serveur afin de reconstruire des objets Java

Voici quelques liens qui pourront vous inspirer 

  1. Avec SAX : http://java.developpez.com/faq/xml/?page=sax
  2. Avec DOM : http://www.mkyong.com/java/how-to-create-xml-file-in-java-dom/
  3. Ou JDOM : http://cynober.developpez.com/tutoriel/java/xml/jdom/ 
  • Modifiez la requête précédente pour avoir une représentation JSON de la ressource. 
request.addHeader("Accept","application/json");
  • Exécutez à nouveau le code et vérifiez que la représentation de la ressource a changé.
  • Traitez la réponse JSON obtenue 

Pour Java, il existe une variété de librairies permettant de traiter les représentations JSON (http://json.org ), pour ce TP nous utiliserons la librairie json-simple que vous pourrez télécharger ici. Après avoir téléchargé la librairie, ajoutez une référence à votre projet comme précédemment.

Une représentation JSON peut être de deux types : JsonObjet ou JsonArray
Il est necessaire de connaitre au préalable le format de la représentation avant de pouvoir la traiter.

//Pour créer un Json Array  
JSONArray j = (JSONArray)JSONValue.parse(result.toString());
//Pour créer un Json Object 
JSONObject j = (JSONObject )JSONValue.parse(result.toString());
//Pour un code plus propre 
try
{
Object o = JSONValue.parse(result.toString()); 
if (o instanceof JSONObject) 
{
JSONObject j = (JSONObject )JSONValue.parse(result.toString());
}
else{
JSONArray j = (JSONArray)JSONValue.parse(result.toString());
}
}
catch(Exception e) {
//Si une exception est levée la représentation n'est pas valide
}

Comme on l'a vu en cours le format JSON est assez simple et très facile à manipuler, c'est une représentation clefs/valeur.  Chaque objet est caractérisé par un ensemble de clefs qui représentent ses attributs et des valeurs qui correspondent aux valeurs des attributs.  Les collections sont une liste d'objet.  Sachant tout ça, le traitement devient simple. 

//Pour traiter un object  
JSONObject j = (JSONObject )JSONValue.parse(result.toString());
//valeur de la clef nom dans l'object JSON
String nom = (String)j.get("nom");
//valeur de la clef description
String description = (String)j.get("description");
}

Pour traiter une collection, il suffit d'itérer sur la collection et appliquer le traitement précédent sur chaque objet trouvé

//Pour traiter une collection
JSONObject j = (JSONObject )JSONValue.parse(result.toString());
  for(int i = 0 ; i< j.size(); i++)
{
  JSONObject o = (JSONObject) j.get(i); 
  //valeur de la clef nom dans l'object JSON
String nom = (String)o.get("nom");
//valeur de la clef description
String description = (String)o.get("description");         
  System.out.println("For Object " + i + " we have :");
  System.out.println("Nom " + nom);
  System.out.println("Déscription " + description);
}
}