Logo EPFL
  SERVICES CENTRAUX
Ecole Polytechnique Fédérale de Lausanne
   SERVICE INFORMATIQUE CENTRAL
français
   > Place centrale > L'informatique à l'EPFL >SIC > Publications > FI classés par thème > FI9/2002
FI 9 /2002

Plate-forme d'échange d'informations dans le domaine de projets humanitaires
Stefan Hüsemann
version html, pda, pdf 55 K
 
sic-info
version html, pda, pdf 53 K
 
Cellule AFS à l'EPFL
Felipe Valenz
version html, pda, pdf 73 K
 
Conférence Steltor 2002
Franck Perrot version html, pda, pdf 49 K
 
Linux et la programmation temps-réel
Raphaël Arrigoni & Fiorenzo Gamba
version html, pda, pdf 50 K
 
Portable Batch System: un standard pour l'Ecole ?
Jean-Michel Chenais & Trach-Minh Tran
version html, pda, pdf 50 K
 
Web services: passe-moi le sel!
Pierre Crevoisier
version html, pda, pdf 92 K
 
Création d'un modèle personnalisé dans PowerPoint
Jacqueline Frey
version html, pda, pdf 54 K
 
Distribution d'ordinateurs portables aux étudiants de l'EIVD
Roland Calinon & Henri Röthlisberger
version html, pda, pdf 61 K


LIENS UTILES

•  calendrier IT

•  calendrier des cours dispensés au SIC

•  rubrique emplois regroupe différentes offres concernant l'informatique, internes ou externes à l'EPFL.
 

Abonnez-vous à la version électronique du Flash informatique en envoyant un courrier à: fi-subscribe@listes.epfl.ch

Abonnez votre pda à la version AvantGo en cliquant ici: version pda


Web services: passe-moi le sel!

 

Pierre.Crevoisier[AT]epfl.ch, e-pfl Pierre.Crevoisier

L'été a été chaud C'était au mois de juillet dernier et la torpeur de la saison aurait pu nous rendre indifférents aux annonces importantes. Après Google, Amazon annonçait la publication de ses propres API Soap pour accéder à ses volumineuses bases de données.

D'aucuns hausseront les épaules en s'interrogeant sur l'intérêt à lancer des requêtes sur les serveurs d'Amazon. Fondamentalement, aucun! Mais ce serait faire peu de cas du caractère emblématique de l'annonce que de l'abandonner ainsi sans un examen un peu plus approfondi.

D'abord parce qu'Amazon n'est pas un acteur négligeable des marchés du livre et des produits multimédias. Ensuite, parce qu'au-delà des jargons dont on use pour éloigner le commun des mortels de leurs usages, les Web services sont d'un abord relativement simple. Enfin, la porte ouverte sur les contenus de ce géant de la distribution en ligne est un extraordinaire pied de nez à tous ceux – et ils sont encore nombreux – qui pensent et conçoivent leur capital documentaire comme un coffre-fort inexpugnable plus que comme une richesse à partager

Remplacez le masque d'Amazon par le profil de grandes bibliothèques, de centres de documentation, voire de services dont vous êtes aujourd'hui quotidiennement les usagers et vous mesurerez l'intérêt de la question.

Nous allons ici poursuivre la réflexion entamée par Francis Lapique dans le Flash Info du mois dernier ( http://ditwww.epfl.ch/SIC/SA/publications/FI02/fi-8-2/8-2-page1.html ). Notre perspective sera ici sans doute moins technique et nous nous concentrerons sur le parti pris de la facilité d'accès.

Un Web service, c'est quoi?

En termes simples, ce qui caractérise un tel service peut être ainsi défini:
•  il s'agit d'une application accessible via les protocoles réseau actuels;
•  cette application est destinée à exécuter des tâches spécifiques et à communiquer avec d'autres applications disponibles ailleurs sur le réseau;
•  son interface (la manière dont chaque application se parle, envoie et reçoit des messages) est standardisée et ouverte;
•  les messages sont codés au format XML (Extensible Markup Language);
•  un Web service peut être développé dans n'importe quel langage et sur n'importe quelle plate-forme;

Nous aborderons ici deux types: XML-RPC et SOAP et les exemples seront développés en PHP. Mais il existe de nombreuses implémentations de ces technologies: Perl, Python, C/C++, Java, .Net, Rebol, etc.1

Un client Soap basique

Pour illustrer la simplicité, nous allons rapidement mettre en place un premier client SOAP (pour les définitions, je vous renvoie à l'article précité) en reprenant l'exemple d'Amazon.

Vous n'avez aucune connaissance de SOAP. Pour l'heure, cela n'a pas d'importance. Nous allons utiliser le matériel mis à disposition sur le net par Jeff Barr sous la forme d'une interface PHP pour Amazon (http://www.vertexdev.com /pia).

Avant de commencer, téléchargez la librairie NuSOAP (http://dietrich.ganx4.com/nusoap ) et la classe AmazonSearch.php ( http://www.syndic8.com/~jeff/AmazonSearch.php ). Sur votre serveur Web de test, créez un répertoire amazon et placez votre récolte à l'intérieur. Créez maintenant le fichier index.php suivant2:

		
<?php
     /* Create search form */
     echo "<FORM METHOD='POST'>\n";
     echo «Chercher un auteur: <INPUT TYPE='TEXT'NAME='keyword'>\n";
     echo "</FORM>\n";
     
     if (!empty($keyword))
     {
          /* Load object definition */
          require_once(«AmazonSearch.php");

          /* Set developer token */
          $token = 'D2ED5GR7A6RZ7Y';

          /* Create search object */
          $search = new AmazonSearch($token);

          /* Perform Search using DoAuthorSearch method*/
          $results = $search->DoAuthorSearch($keyword);

          /* Display result */
          echo "<TABLE border='1'>\n";
          foreach($results as $item) {
           echo "<TR valign='top'>\n";
           while (list($k,$val) = each($item)) {
            while (list($key,$value) = each($val)) {
             echo "<TD>";
             if (is_array($value)) foreach($value as $tmp) echo $tmp . "&nbsp;";
             elseif (eregi(«image",$value)) echo "<IMG SRC='". $value . "'>";
             else echo $value; 
             echo "</TD>\n";
            }
           }
           echo "</TR>\n";
          }
          echo "</TABLE>\n";          }
?>

Voilà, votre premier client SOAP est prêt (voir fig.1). Il est encore très élémentaire et il méritera quelques améliorations

Figure 1  

Néanmoins, vous avez mis cinq minutes pour le mettre en place. Je vous laisserai maintenant modifier l'affichage des résultats selon vos besoins, explorer la classe AmazonSearch pour voir comment tournent les pistons ou appeler d'autres méthodes. En voici la liste:

·     DoKeywordSearch($Keyword, $Type = 'lite', $Category = 'books', $Max = DEFAULT_MAX)
·     DoBrowseNodeSearch($BrowseNode, $Type = 'lite', $Category = 'books', $Max = DEFAULT_MAX)
·     DoAuthorSearch($Author, $Type = 'lite', $Category = 'books', $Max = DEFAULT_MAX)
·     DoASINSearch($ASIN, $Type = 'lite')
·     DoUPCSearch($UPC, $Type = 'lite', $Category = 'music')
·     DoManufacturerSearch($Manufacturer, $Type = 'lite', $Category = 'books', $Max = DEFAULT_MAX)
·     DoActorSearch($Actor, $Type = 'lite', $Category = 'dvd', $Max = DEFAULT_MAX)
·     DoDirectorSearch($Director, $Type = 'lite', $Category = 'dvd', $Max = DEFAULT_MAX)

A noter que seul le premier argument est nécessaire lors de l'appel.

SOAP vs. XML-RPC?

Jusqu'à présent, il n'a pas été nécessaire de connaître les secrets de SOAP pour l'utiliser. Si votre ambition vous porte à la mise en place d'un serveur, il faudra cette fois retrousser les manches. Pour ceux et celles qui souhaitent démarrer en douceur, il existe une voie plus simple que SOAP: il s'agit d'XML-RPC, lancé par Userland Software en avril 98 et qui repose sur XML et le protocole RPC (Remote Procedure Calling).

La différence? Le principe est le même que pour SOAP, sauf que les spécifications de l'un s'affichent en 1500 mots, celles de l'autres en 11'000 SOAP est devenu un standard du W3C. XML-RPC est plus restreint dans sa portée, mais il est fortement soutenu par la communauté Open Source. Si un choix s'impose en fonction de l'échelle de déploiement de vos applications futures, XML-RPC peut être considéré comme tout à fait suffisant pour une première approche.

Un serveur xml-rpc

Je vous encourage à vous arrêter sur SitePoint ( http://www.webmasterbase.com/article.php?pid=0&aid=827 ) pour y découvrir un excellent tutoriel permettant d'installer aisément un couple client-server en XML-RPC3. L'exemple permet au client de demander au serveur une liste de news et d'afficher ensuite l'intégralité du contenu du texte sélectionné. La figure 2 vous montre les processus enclenchés par le serveur:

Figure 2 - 1) une connexion à la base de données;
2) l'inclusion d'une implémentation xml-rpc, en l'occurrence kd_xmlrpc.php (développée par Keith...)
3) l'inclusion de l'api du serveur contenant l'ensemble des méthodes disponibles (dans l'exemple, deux méthodes sont implémentées: getNewsList et viewNewsItem);
4) l'appel à la méthode XMLRPC_parse() permettant de transformer le message XML reçu par le client en variables PHP;
5) la sélection de la méthode appelée par le client;
6) le contrôle des paramètres envoyés avec la méthode;
7) enfin, si tout va bien, le traitement de la requête;

		
/* parameters */
$query_info['limit'] = 10; // limit display
$query_info['order'] = «author"; // order the results by

/* XMLRPC_prepare works on an array and converts it to 
XML-RPC parameters */
list($success, $response) = XMLRPC_request(
                         $site,$location,
                      'news.getNewsList',
                      array(XMLRPC_prepare($query_info),
                      'HarryFsXMLRPCClient'));

Et, si tout se passe bien (!), le client pourra afficher les résultats:


if ($success) {
     $count = 0;
     while ( list ( $key, $val ) = each ( $response ) ) {
          echo $response[$count]['title'] . ", " . $response[$count]['author'] . "<br>";
          $count++;
     }
}

Du côté du client, on remarquera certains éléments-clés lui permettant de dialoguer aisément avec le serveur:
•  l'inclusion de la même implémentation xml-rpc (kd_xmlrpc.php toujours!);
•  l'url du serveur, découpé en deux variables: le nom de domaine (ci-après $site) et le path d'accès au script ($location).

Nous n'entrerons pas ici dans les détails du script client, mais il est intéressant de voir comment l'appel à la méthode getNewsList est traité:

Au-delà du survol

Cet espace n'est pas destiné à assurer l'exhaustivité. L'intention est ici de montrer que l'accès à ces technologies très tendance sur le Web n'est pas réservé à l'élite du développement. Ce qui compte, aujourd'hui, c'est d'accompagner une mutation informatique.

Hier encore, la cohérence n'était vue qu'à travers de grands projets dont les initiateurs devaient tout maîtriser, de l'architecture au code source, des clefs d'accès au serveurs jusqu'au contenu Aujourd'hui – à la lumière des échecs des projets centralisateurs - nous sommes peut-être entrés dans l'ère de la biodiversité informatique, enfin reconnue comme une réalité à (re)construire, et non plus seulement dans sa pesanteur.

Il y a sans doute une véritable stratégie d'approche des Web services à mettre en place au cours des mois qui viennent. Nous en parlerons dans un prochain article.


1 Nous avons plus de références en xml-rpc; si une implémentation particulière vous intéresse, consultez la liste ( http://www.xmlrpc.com/directory/1568/implementations ) accessible sur le site xmplrpc.com et un tutoriel ( http://xmlrpc-c.sourceforge.net/xmlrpc-howto/xmlrpc-howto.html ) assez complet sur sourceforge.net.

2 Les scripts mentionnés sont également disponibles ici: http://ditwww.epfl.ch/SIC/SA/publications/FI02/fi-9-2/soap.zip , et http://ditwww.epfl.ch/SIC/SA/publications/FI02/fi-9-2/xmlrpc.zip

3 Build your own Web Service with PHP and XML-RPC, par Harry Fueck


© Flash informatique no 9/2002, 1015 Lausanne, tél. 021 69 322 11, fi[AT]epfl.ch
http://ditwww.epfl.ch/SIC/SA/publications/FI02/fi-9-2/9-2-page13.html
mise à jour: hrb/11.11.02