Appeler des fonc­tion­na­li­tés sur des or­di­na­teurs distants au sein d'un réseau ou sur des systèmes dis­tri­bués (un groupe d’or­di­na­teurs in­dé­pen­dants) à l’aide d’un accès à distance est une pratique courante depuis des décennies. L’idée de base derrière la tech­no­lo­gie RPC (Remote Procedure Calls) fut formulée dès 1976 par James E. White dans la requête RFC 707. Par con­sé­quent, ce principe date d’avant le World Wide Web.

Remarque

En 2015, Google a développé le framework gRPC pour permettre à RPC de sa­tis­faire aux exigences des struc­tures in­for­ma­tiques modernes.

Le protocole XML-RPC est l’une des solutions les plus ap­pré­ciées pour utiliser des requêtes RPC pratiques à des fins propres. Les appels sont effectués à l’aide du protocole HTTP(S) et de l’Ex­ten­sible Markup Language (XML). Que recouvre exac­te­ment cette spé­ci­fi­ca­tion, quand est-elle utilisée et comment fonc­tionne-t-elle exac­te­ment ?

Qu’est-ce que XML-RPC ?

XML-RPC (abré­via­tion de « Extensible Markup Language Remote Procedure Call ») est une spé­ci­fi­ca­tion de protocole pour l’exécution d’appels RPC (appels à distance dans les réseaux d’or­di­na­teurs) ayant recours au protocole réseau sans statut HTTP et au langage de balisage XML (en partie res­pon­sable du nom de cette spé­ci­fi­ca­tion). Le HTTP définit le transfert des données alors que le XML est utilisé pour l’affichage de ces données. Lors de la création de la spé­ci­fi­ca­tion XML-RPC, une im­por­tance toute par­ti­cu­lière a été accordée au fait qu’elle puisse être im­plé­men­tée sans trop d’efforts dans dif­fé­rents langages de pro­gram­ma­tion et dif­fé­rentes pla­te­formes de systèmes.

Note

Bien que la spé­ci­fi­ca­tion XML-RPC prévoit ex­clu­si­ve­ment l’uti­li­sa­tion du protocole HTTP non sécurisé pour le transfert des données, il existe aujourd’hui des variantes largement répandues et acceptées de ce standard qui sup­por­tent le protocole HTTPS, un protocole nettement plus sûr mettant en place un chif­fre­ment SSL/TLS.

Développé en 1998, XML-RPC est le fruit d’une étroite col­la­bo­ra­tion entre le dé­ve­lop­peur principal Dave Winer, sa société UserLand Software et Microsoft. La mul­ti­na­tio­nale avait en effet décelé le grand potentiel de ce nouveau standard sus­cep­tible de favoriser ses propres relations com­mer­ciales B2B. Complété par de nouvelles fonc­tion­na­li­tés, XML-RPC s’est ensuite établi comme protocole pour les in­ter­faces destinées aux services Web et s’est vu affubler d’un nouveau nom : SOAP (Simple Object Access Protocol).

Comment fonc­tionne XML-RPC ?

Les clients sou­hai­tant recourir à XML-RPC utilisent le protocole de transfert HTTP, ou plus pré­ci­sé­ment la méthode de requête HTTP POST. Après avoir reçu la requête HTTP, le serveur analyse le document XML qui se trouve dans le corps de la requête. À partir de son contenu, il génère ensuite le/les paramètre(s) pour la fonc­tion­na­lité souhaitée et l’exécute. Dans le cadre d’une réponse HTTP, le serveur renvoie le résultat au client dans un document XML. XML-RPC supporte les types de données suivants pour la trans­mis­sion des pa­ra­mètres ainsi que dans la réponse reçue par un client :

Type de données Exemple de balise Des­crip­tion
array <array><data>…</data></array> Liste pouvant contenir plusieurs valeurs ou types de données
base64 <base64>SGFsbG8gV2VsdA==</base64> Données binaires codées selon la procédure Base64
boolean <boolean>1</boolean> Variable booléenne (vraie = 1 vs. faux = 0)
dateTime.iso8601 <dateTime.iso8601>20200414T16:23:55</dateTime.iso8601> Date et heure au format ISO-8601
double <double>-0.32653</double> Nombre flottant avec double précision (64 bits)
integer <int>32</int> ou <i4>32</i4> Integer (nombre entier)
string <string>Bonjour à tous !</string> Chaîne de ca­rac­tères ; peut contenir zéro octet
struct <struct><data>…</data></struct> Groupe de paires clé/valeur (dans le cas présent, les clés sont des chaînes de ca­rac­tères et les valeurs peuvent être de n’importe quel type)

Si plusieurs valeurs ou types de données sont regroupés, la notation XML-RPC offre déjà deux options avec « array » et « struct ». La première option permet de lister les données sou­hai­tées dans l’ordre désiré et « struct » permet de trans­mettre au serveur les paires clé/valeur prés­truc­tu­rées comme dans l’exemple suivant :

<struct>
    <member>
        <name>Entrée 1</name>
        <value><int>1</int></value>
    </member>
    <member>
        <name>Entrée 2</name>
        <value><int>2</int></value>
    </member>
</struct>
Note

Certains langages comme Java disposent d’im­plé­men­ta­tions via XML-RPC et per­met­tent d’indiquer des valeurs nulles. Dans ce cas, le type de données « nil » doit toujours être utilisé dans le document XML bien qu’il ne fasse pas of­fi­ciel­le­ment partie de la spé­ci­fi­ca­tion XML-RPC et qu’il ne soit pas supporté par tous les serveurs.

Dans quels cas XML-RPC est-il utilisé ?

À l’heure actuelle, XML-RPC ne joue plus de rôle majeur dans la com­mu­ni­ca­tion de réseau. Après sa pu­bli­ca­tion en 1998, ce format d’échange a ra­pi­de­ment montré son manque de flexi­bi­lité, notamment en raison de sa mo­du­la­rité limitée et de son in­ca­pa­cité à trans­mettre des struc­tures XML propres. Les efforts de con­ver­sion élevés qui en résultent ont rendu quasiment in­dis­pen­sable une nouvelle solution qui a été ra­pi­de­ment apportée avec le protocole SOAP déjà évoqué (également développé par l’équipe de Dave Winer en col­la­bo­ra­tion avec Microsoft).

Néanmoins, il existe au­jour­d'hui encore des ap­pli­ca­tions Web disposant d’une interface XML-RPC visant par exemple à permettre un échange de données simple avec des services externes. L’Office fédéral allemand des impôts met par exemple à dis­po­si­tion une interface XML-RPC pour la vé­ri­fi­ca­tion au­to­ma­ti­sée des numéros d’iden­ti­fi­ca­tion à la TVA étrangers (depuis 2019, via une requête HTTPS). Les systèmes de gestion de contenu tels que WordPress possèdent souvent une interface XML-RPC pour l’échange avec d’autres services Web. Par ailleurs, ce format d’échange constitue la base de la tech­no­lo­gie Pingback qui, pendant de nom­breuses années, s’est révélée un outil essentiel pour les blogueurs afin de créer des liens. Vous pourrez en apprendre davantage à ce sujet dans l’article « Pingbacks et track­backs : de quoi s'agit-il ? ».

Exemple de requête serveur simple via XML-RPC

Pour finir, un exemple simple nous permet d’illustrer la com­mu­ni­ca­tion client-serveur via une interface XML-RPC. Dans ce cadre, la requête HTTP du client ressemble à ce qui suit :

<?xml version="1.0"?>
    <methodCall>
        <methodName>Teststatut</methodName>
        <params>
        <param>
            <value><i4>10</i4></value>
        </param>
        </params>
    </methodCall>

La fonc­tion­na­lité « tests­ta­tut » est appelée dans le conteneur « me­thod­Call » et est définie dans le conteneur « me­thod­Name ». La fonc­tion­na­lité transmet la valeur entière « 10 » comme paramètre.

La réponse du serveur à ce « tests­ta­tut » pourrait res­sem­bler à ce qui suit :

<?xml version="1.0"?>
    <methodResponse>
        <params>
        <param>
            <value><string>Statut : OK</string></value>
        </param>
        </params>
    </methodResponse>

Dans cet exemple, la réponse simple du serveur est donc « Statut : OK ».

Aller au menu principal