# XML-RPC : des Remote Procedure Calls au format XML

Appeler des fonctionnalités sur des ordinateurs distants au sein d’un réseau ou sur des systèmes distribués (un groupe d’ordinateurs indépendants) **à l’aide d’un accès à distance** est une pratique courante depuis des décennies. L’idée de base derrière la technologie [RPC (Remote Procedure Calls)](https://www.ionos.fr/digitalguide/serveur/know-how/quest-ce-que-le-remote-procedure-call/ "Qu’est-ce que le Remote Procedure Call&nbsp;?") fut formulée dès 1976 par James E. White dans la requête [RFC 707](https://tools.ietf.org/html/rfc707 "RFC 707: RFC 707 – High-level framework for network-based resource sharing"). Par conséquent, ce principe date d’avant le World Wide Web.

Remarque En 2015, Google a développé le framework [gRPC](https://www.ionos.fr/digitalguide/serveur/know-how/presentation-de-grpc/ "Présentation de gRPC") pour permettre à RPC de satisfaire aux exigences des structures informatiques modernes.

Le protocole XML-RPC est l’une des solutions les plus appré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’Extensible Markup Language ([XML](https://www.ionos.fr/digitalguide/sites-internet/developpement-web/quest-ce-que-le-xml/ "Qu’est-ce que le XML&nbsp;?")). Que recouvre exactement cette **spécification**, quand est-elle utilisée et comment fonctionne-t-elle exactement ?

## Qu’est-ce que XML-RPC ?

XML-RPC (abréviation de « **Ex**tensible **M**arkup **L**anguage **R**emote **P**rocedure **C**all ») est une spécification de protocole pour l’exécution d’appels RPC (appels à distance dans les réseaux d’ordinateurs) ayant recours au protocole réseau sans statut [HTTP](https://www.ionos.fr/digitalguide/hebergement/aspects-techniques/definition-protocole-http/ "Définition protocole HTTP") et au langage de balisage XML (en partie responsable du nom de cette spécification). 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écification XML-RPC, une importance toute particulière a été accordée au fait qu’elle puisse être implémentée sans trop d’efforts dans différents langages de programmation et différentes plateformes de systèmes.

Note Bien que la spécification XML-RPC prévoit exclusivement l’utilisation 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 supportent le protocole [HTTPS](https://www.ionos.fr/digitalguide/sites-internet/creation-de-sites-internet/comment-passer-un-site-web-en-ssl-et-https/ "Comment passer un site Web en SSL et HTTPS?"), un protocole nettement plus sûr mettant en place un chiffrement **SSL/TLS**.

Développé en **1998**, XML-RPC est le fruit d’une étroite collaboration entre le développeur principal Dave Winer, sa société UserLand Software et **Microsoft**. La multinationale avait en effet décelé le grand potentiel de ce nouveau standard susceptible de favoriser ses propres relations commerciales [B2B](https://www.ionos.fr/digitalguide/web-marketing/vendre-sur-internet/b2b-business-to-business/ "B2B: business to business"). Complété par de nouvelles fonctionnalités, XML-RPC s’est ensuite établi comme **protocole pour les interfaces destinées aux services Web** et s’est vu affubler d’un nouveau nom : [SOAP (Simple Object Access Protocol)](https://www.ionos.fr/digitalguide/sites-internet/developpement-web/soap-simple-object-access-protocol/ "SOAP - Simple Object Access Protocol").

## Comment fonctionne XML-RPC ?

Les clients souhaitant recourir à XML-RPC utilisent le protocole de transfert **HTTP**, ou plus précisément la méthode de [requête HTTP](https://www.ionos.fr/digitalguide/hebergement/aspects-techniques/requete-http/ "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 **fonctionnalité 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 transmission des paramètres ainsi que dans la réponse reçue par un client :

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

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 souhaitées dans l’ordre désiré et « struct » permet de transmettre au serveur les paires clé/valeur préstructurées comme dans l’exemple suivant :

```none
<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’implémentations via XML-RPC et permettent **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 officiellement partie de la spécification 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 communication de réseau. Après sa publication en 1998, ce format d’échange a rapidement montré son **manque de flexibilité**, notamment en raison de sa **modularité limitée** et de son incapacité à transmettre des structures XML propres. Les efforts de conversion élevés qui en résultent ont rendu quasiment indispensable une nouvelle solution qui a été rapidement apportée avec le protocole SOAP déjà évoqué (également développé par l’équipe de Dave Winer en collaboration avec Microsoft).

Néanmoins, il existe aujourd’hui encore des applications 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 à disposition une interface XML-RPC pour la **vérification automatisée des numéros d’identification à la [TVA](https://www.ionos.fr/digitalguide/startup/gestion/numero-de-tva-intracommunautaire/ "Numéro de TVA intracommunautaire: toutes les infos à connaître") étrangers** (depuis 2019, via une requête HTTPS). Les [systèmes de gestion de contenu](https://www.ionos.fr/digitalguide/hebergement/cms/comparatif-des-meilleurs-cms/ "Comparatif des meilleurs CMS") tels que[ WordPress](https://www.ionos.fr/digitalguide/hebergement/cms/wordpress-le-plus-populaire-des-cms-a-la-loupe/ "WordPress : le plus populaire des CMS à la loupe") 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 **technologie Pingback** qui, pendant de nombreuses 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 trackbacks : de quoi s’agit-il ? »](https://www.ionos.fr/digitalguide/hebergement/blogs/pingback-und-trackback-les-bases/ "Pingback und Trackback : les bases").

## Exemple de requête serveur simple via XML-RPC

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

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

La **fonctionnalité** « teststatut » est appelée dans le **conteneur** « methodCall » et est définie dans le conteneur « methodName ». La fonctionnalité transmet la valeur entière « 10 » comme **paramètre**.

La **réponse du serveur** à ce « **teststatut** » pourrait ressembler à ce qui suit :

```none
<?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** ».


This is a markdown version of: [https://www.ionos.fr/digitalguide/sites-internet/developpement-web/quest-ce-que-xml-rpc/](https://www.ionos.fr/digitalguide/sites-internet/developpement-web/quest-ce-que-xml-rpc/) for AI/LLM consumption.