Pages 1 | 2
Issue de la société "Userland
Software" (Avril 1998), la technologie XML-RPC
repose, comme son nom l'indique, sur XML
(Extensible Markup Language) et sur le protocole RPC (Remote
Procedure Calling). Tandis qu'XML apporte l'indépendance
vis à vis de la plate-forme d'exécution, RPC
apporte la possibilité d'effectuer "des appels
de procédure" via internet.
Grâce à l'utilisation de la technologie XML-RPC, il
est ainsi possible à différentes applications de dialoguer
entre elles sans se soucier des systèmes sur lesquelles elles
fonctionnent, ni même du langage dans lequel elles ont été
écrites.
En effet il existe de nombreuses implémentations de cette
technologie : Php mais aussi Perl, Python, C / C++, Java, .Net,
Ruby, Rebol, Cold Fusion... La liste est longue.
Si une implémentation en particulier vous intéresse,
vous pouvez consulter ce "how-to"
ou cette liste.
Si vous souhaitez en savoir plus sur les RPC (entre autres), ce
qui n'est pas le sujet de ce tutoriel, consultez ce texte, "xmlRpcForNewbies"
qui malgré un titre un peu péjoratif n'en constitue
pas moins une bonne source d'informations pour dépoussiérer
ou mettre à jour ses connaissances.
L'objet de ce tutoriel est de comprendre de quoi est constitué
un client XML-RPC écrit en Php : les étapes et les
fonctions nécessaires à l'établissement d'une
connexion puis le rappatriement des données à partir
du serveur.
XML-RPC : un dialogue client / serveur
Oui, nous allons "disséquer" le code d'un client
Php, mais pour nous connecter sur quel serveur ? Bonne question.
Le
client en question que nous allons étudier contient l'adresse
d'un serveur de test élégamment mis à notre
disposition par sourceforge.net. Nous pourrons ainsi focaliser notre
attention sur le code du client. Celui-ci est construit sur la librairie
initiallement développée par Edd Dumbill (Useful
Information Company) avant d'être, depuis sa version 1.0,
ouverte à un développement plus collectif via SourceForge.
Pourquoi utiliser une librairie alors que Php 4.1 propose désormais
par défaut des
fonctions XML-RPC ? D'une part parce que celle-ci est écrite
en C, elle offre donc de bonnes performances, et d'autre part (cf
le lien précédent), le site php.net prévient
l'utilisateur potentiel de ces fonctions que celles-ci peuvent à
tout moment changer de nom, on peut lire : "Be warned and use
this extension at your own risk".
Au regard de cette recommandation, il est bien évidemment
déconseillé de les utiliser en production. Enfin à
l'heure où sont écrites ces lignes, les hébergeurs
proposant Php 4.1 ne sont pas encore légion.
Cette librairie va grandement nous faciliter le travail. Il suffit
par la suite de connaître les différents mécanismes
et échanges nécessaires au dialogue du client avec
le serveur pour rappatrier et exploiter les résultats transmis
par le serveur. N'oublions pas bien sûr la documentation de
l'API qui nous renseignera sur les différentes méthodes
disponibles.
Puisque le serveur est fourni, voici ce qu'il nous reste à
faire :
- Créer un objet "client", c'est l'initialisation
du client
- Créer un message à destination du serveur
- Envoyer celui-ci
- Le réceptionner (vérifier les codes retour)
puis exploiter le résultat obtenu.
Ces différentes étapes nécessitent de connaître
un minimum la syntaxe permettant de manipuler des classes en Php.
Ce
tutoriel indique comment s'y prendre.
Première étape : initialisation
du client
Voici tout d'abord le lien qui pointe vers la documentation de cette
librairie ainsi que vers la librairie elle-même
(raccourci).
Nous voulons initialiser notre client, nous allons donc tout naturellement
utiliser la classe prévue à cet effet : "xmlrpc_client".
La documentation est claire, voici la syntaxe pour créer
notre objet client :
$client=new xmlrpc_client($server_path, $server_hostname,
$server_port);
De la version du client Php que nous étudions (rappel),
nous tirons les valeurs suivantes :
$server_path : 'api/sample.php'
$server_hostname : xmlrpc-c.sourceforge.net''
$server_port : 80
Plus précisemment, nous avons tiré ces informations
de la ligne suivante :
$client = new xmlrpc_client('/api/sample.php',
'xmlrpc-c.sourceforge.net', 80);
(Note : le code source étudié initialise
le client en nommant un objet "$server", il est à
notre avis plus intuitif d'utiliser "$client" dans ce
cas)
Nous savons donc désormais à quoi correspondent les
trois paramètres de cette classe. Le premier paramètre
est donc le chemin du script qui va gérer la requête
XML-RPC, le second paramètre est le nom (ou l'IP) du serveur,
quant au troisième (facultatif) il représente le port
sur lequel nous nous connectons (80 par défaut).
Au niveau des méthodes fournies par cette classe, on trouve
:
- send() : son nom est suffisamment explicite, nous l'utiliserons
à la prochaine étape
- setCredentials : Transporte le login / password à
des fins d'authentification HTTP
- setCertificate : Permet d'employer HTTPS. Attention, dans
ce cas Php doit être compilé avec l'extension "curl".
De plus, php 4.0.2 au moins est nécessaire pour faire fonctionner
HTTPS, à noter également qu'un bug de la version 4.0.6
empêche son utilisation.
- setDebug : Très utile pour obtenir des informations
retournées par le serveur, nous testerons.
Deuxième étape : construction de
la requête
Cette étape repose sur l'utilisation de la classe "xmlrpcmsg"
dont voici la syntaxe :
$message=new xmlrpcmsg($methodName, $parameterArray);
Là encore c'est le code source de notre client qui va nous
indiquer la valeur des paramètres.
$methodName : 'sample.sumAndDifference'
sumAndDifference est le nom de la méthode que nous allons
appeler. Celle-ci permet dans un premier temps d'ajouter deux nombres
entre eux, puis dans un deuxième temps, de les soustraire.
La technologie XML-RPC permet de manipuler 8 types de données
:
- int
- double
- string
- boolean
- base64
- dateTime.iso8601
- array
- struct
Nous ne sommes pas obligés d'indiquer les paramètres
éventuels d'une méthode lors de la déclaration
de l'objet, il est possible de le faire ultérieurement en
utilisant la méthode "addParam()" après
la création de celui-ci.
Nous décidons de passer néanmoins les paramètres
de la méthode (sumAndDifference) lors de la création
de l'objet. Peu importe le moment où nous le faisons, il
faut de toute façon avoir recours à la classe "xmlrpcval"
afin d'encapsuler nos données dans un format compréhensible
par toutes les autres classes de la librairie.
Voici trois exemples issus de la documentation de cette classe
qui permettent de comprendre comment utiliser nos paramètres
:
(Note : La documentation indique "xmlrpcvalue",
c'est une faute de frappe)
$myInt=new xmlrpcval(1267, "int");
$myString=new xmlrpcval("Hello, World!", "string");
$myBool=new xmlrpcval(1, "boolean");
Fort de ces exemples, et des précédents paragraphes,
nous résumons donc la syntaxe de la déclaration de
notre message :
(Note : tient normalement sur une ligne complète)
$message = new xmlrpcmsg('sample.sumAndDifference',
array(new
xmlrpcval(5, 'int'), new xmlrpcval(3, 'int')));
Pages 1 | 2
|