XML-RPC - XML-RPC

XML-RPC est un protocole d' appel de procédure à distance (RPC) qui utilise XML pour coder ses appels et HTTP comme mécanisme de transport.

Histoire

Le protocole XML-RPC a été créé en 1998 par Dave Winer de UserLand Software et Microsoft , Microsoft considérant le protocole comme un élément essentiel de l'intensification de ses efforts dans le commerce électronique interentreprises. À mesure que de nouvelles fonctionnalités ont été introduites, la norme a évolué pour devenir ce qui est maintenant SOAP .

UserLand a pris en charge XML-RPC à partir de la version 5.1 de son système de gestion de contenu Web Frontier, publié en juin 1998.

L'idée de XML-RPC d'une norme lisible et inscriptible, analysable par script pour les requêtes et réponses HTTP a également été implémentée dans des spécifications concurrentes telles que Web Distributed Data Exchange (WDDX) d' Allaire et WebMethod's Web Interface Definition Language (WIDL) ). L'art antérieur enveloppant les objets COM , CORBA et Java RMI dans la syntaxe XML et les transportant via HTTP existait également dans la technologie WebBroker de DataChannel.

L'utilisation générique de XML pour l'appel de procédure à distance (RPC) a été brevetée par Phillip Merrick, Stewart Allen et Joseph Lapp en avril 2006, revendiquant le bénéfice d'une demande provisoire déposée en mars 1998. Le brevet a été attribué à webMethods , situé à Fairfax, VA . Le brevet a expiré le 23 mars 2019

Usage

Dans XML-RPC, un client exécute un RPC en envoyant une requête HTTP à un serveur qui implémente XML-RPC et reçoit la réponse HTTP. Un appel peut avoir plusieurs paramètres et un résultat. Le protocole définit quelques types de données pour les paramètres et le résultat. Certains de ces types de données sont complexes, c'est-à-dire imbriqués. Par exemple, vous pouvez avoir un paramètre qui est un tableau de cinq entiers.

La structure des paramètres / résultats et l'ensemble des types de données sont censés refléter ceux utilisés dans les langages de programmation courants.

L'identification des clients à des fins d'autorisation peut être réalisée à l'aide de méthodes de sécurité HTTP courantes. L'authentification d'accès de base peut être utilisée pour l'identification et l'authentification.

Par rapport aux protocoles RESTful, où les représentations de ressources (documents) sont transférées, XML-RPC est conçu pour appeler des méthodes . La différence pratique est simplement que XML-RPC est beaucoup plus structuré, ce qui signifie que le code de bibliothèque commun peut être utilisé pour implémenter des clients et des serveurs et qu'il y a moins de travail de conception et de documentation pour un protocole d'application spécifique. Une différence technique importante entre les protocoles RESTful typiques et XML-RPC est que le protocole RESTful utilise l'URI HTTP pour les informations de paramètres, tandis qu'avec XML-RPC, l'URI identifie simplement le serveur.

JSON-RPC est similaire à XML-RPC.

Types de données

Les types de données courants sont convertis en leurs équivalents XML avec des exemples de valeurs ci-dessous:

Nom Exemple de tag Description
déployer
<array>
  <data>
    <value><i4>1404</i4></value>
    <value><string>Something here</string></value>
    <value><i4>1</i4></value>
  </data>
</array>
Tableau de valeurs, ne stockant aucune clé
base64
<base64>eW91IGNhbid0IHJlYWQgdGhpcyE=</base64>
Données binaires codées en base64
booléen
<boolean>1</boolean>
Valeur logique booléenne (0 ou 1)
date / heure
<dateTime.iso8601>19980717T14:08:55Z</dateTime.iso8601>
Date et heure au format ISO 8601
double
<double>-12.53</double>
Nombre à virgule flottante double précision
entier
<int>42</int>

ou

<i4>42</i4>
Nombre entier , entier
chaîne de caractères
<string>Hello world!</string>

ou

Hello world!
Chaîne de caractères. Doit suivre le codage XML .
struct
<struct>
  <member>
    <name>foo</name>
    <value><i4>1</i4></value>
  </member>
  <member>
    <name>bar</name>
    <value><i4>2</i4></value>
  </member>
</struct>
Tableau associatif
néant
<nil/>
Valeur nulle discriminée ; une extension XML-RPC

Exemples

Un exemple de requête XML-RPC typique serait:

<?xml version="1.0"?>
<methodCall>
  <methodName>examples.getStateName</methodName>
  <params>
    <param>
        <value><i4>40</i4></value>
    </param>
  </params>
</methodCall>

Un exemple de réponse XML-RPC typique serait:

<?xml version="1.0"?>
<methodResponse>
  <params>
    <param>
        <value><string>South Dakota</string></value>
    </param>
  </params>
</methodResponse>

Une erreur XML-RPC typique serait:

<?xml version="1.0"?>
<methodResponse>
  <fault>
    <value>
      <struct>
        <member>
          <name>faultCode</name>
          <value><int>4</int></value>
        </member>
        <member>
          <name>faultString</name>
          <value><string>Too many parameters.</string></value>
        </member>
      </struct>
    </value>
  </fault>
</methodResponse>

Critique

Les critiques récents (à partir de 2010) de XML-RPC soutiennent que les appels RPC peuvent être effectués avec du XML brut et que XML-RPC n'ajoute aucune valeur par rapport à XML. XML-RPC et XML nécessitent un modèle de données au niveau de l'application, tel que les noms de champ définis dans le schéma XML ou les noms de paramètres dans XML-RPC. De plus, XML-RPC utilise environ 4 fois le nombre d'octets par rapport au XML brut pour coder les mêmes objets, ce qui est lui-même détaillé par rapport à JSON .

Voir également

Les références

Liens externes