# XML-RPC: llamadas a procedimientos remotos en formato XML

Acceder por **acceso remoto** a ciertas funciones en ordenadores que se encuentran en otras redes o sistemas distribuidos es una práctica común desde hace décadas. La idea básica de la tecnología subyacente [RPC (Remote Procedure Calls)](https://www.ionos.com/es-us/digitalguide/servidores/know-how/que-es-rpc/ "¿Qué es RPC?") fue formulada ya en 1976 por James E. White en [RFC 707](https://tools.ietf.org/html/rfc707 "RFC 707: RFC 707 – High-level framework for network-based resource sharing"), lo que lo convierte en un principio más antiguo que, por ejemplo, la World Wide Web.

Hecho En 2015 Google desarrolló el *framework* [gRPC](https://www.ionos.com/es-us/digitalguide/servidores/know-how/que-es-grpc/ "Qué es gRPC") para que RPC se ajustara a las estructuras de los sistemas informáticos actuales.

Una de las soluciones más populares para aprovechar las ventajas de las peticiones RPC es XML-RPC, que permite realizar llamadas utilizando el protocolo HTTP(S) y el lenguaje de marcas extensible o Extensible Markup Language ([XML](https://www.ionos.com/es-us/digitalguide/paginas-web/desarrollo-web/que-es-xml/ "¿Qué es XML?")). ¿En qué consiste esta **especificación**, para qué se utiliza y cómo funciona exactamente?

## ¿Qué es XML-RPC?

XML-RPC (abreviatura de Extensible Markup Language Remote Procedure Call) es una especificación de protocolo para realizar llamadas RPC (llamadas remotas en redes informáticas) con la ayuda del protocolo de red sin estado [HTTP](https://www.ionos.com/es-us/digitalguide/hosting/cuestiones-tecnicas/protocolo-http/ "protocolo HTTP") y el lenguaje de marcado XML que, en este caso, le otorga su nombre. Mientras que HTTP regula el transporte de datos, XML se utiliza para la presentación de dichos datos. En la determinación del estándar XML-RPC se valoró, sobre todo, el hecho de que se pudiera implementar sin gran esfuerzo en diferentes lenguajes de programación y plataformas de sistemas.

Nota La especificación XML-RPC dispone exclusivamente del protocolo HTTP no seguro para la transmisión de datos, aunque actualmente existen **variaciones** bastante extendidas y aceptadas **del estándar** compatibles con [HTTPS](https://www.ionos.com/es-us/digitalguide/paginas-web/creacion-de-paginas-web/certificados-ssl-y-https-maxima-seguridad-para-tu-web/ "Certificados SSL y HTTPS: máxima seguridad para tu web"), que ofrece una seguridad mucho mayor al apostar por certificados de seguridad **SSL/TLS**.

El desarrollador de *software* Dave Winer y su empresa UserLand Software, **en estrecha colaboración con Microsoft**, fueron los principales responsables de desarrollar XML-RPC en **1998**. Esta gran corporación no tardó en detectar el enorme potencial que tenía este nuevo estándar para promover sus propias relaciones empresariales [B2B](https://www.ionos.com/es-us/digitalguide/online-marketing/vender-en-internet/b2b-business-to-business/ "B2B: business to business"). XML-RPC ha ido incorporando diferentes y novedosas funciones a su gama de características, derivando en el estándar conocido como [SOAP (Simple Object Access Protocol)](https://www.ionos.com/es-us/digitalguide/paginas-web/desarrollo-web/soap-simple-object-access-protocol/ "SOAP - Simple Object Access Protocol") o protocolo simple de acceso a objetos, que se ha consolidado como **protocolo de interfaz de los servicios web** .

## ¿Cómo funciona XML-RPC?

Los clientes que quieren acceder a XML-RPC utilizan el protocolo de transferencia HTTP o, más concretamente, el método POST de [petición HTTP](https://www.ionos.com/es-us/digitalguide/hosting/cuestiones-tecnicas/http-request/ "HTTP Request"). Después de recibir la petición HTTP, **el servidor evalúa el documento XML** que se encuentra en el cuerpo de la solicitud. A partir de su contenido, genera, por ejemplo, los parámetros para la **función deseada** y la ejecuta. Como resultado, el servidor lo vuelve a empaquetar en un documento XML que se devolverá al cliente en forma de respuesta HTTP. XML-RPC **soporta**, por tanto, los siguientes **tipos de datos** cuando entrega parámetros o recibe respuesta de un cliente:

<table>
  <thead>
    <tr>
      <th>Tipo de datos</th>
      <th>Ejemplo de etiqueta</th>
      <th>Descripción</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>array</td>
      <td>&lt;array&gt;&lt;data&gt;…&lt;/data&gt;&lt;/array&gt;</td>
      <td>Lista que puede contener varios valores o tipos de datos</td>
    </tr>
    <tr>
      <td>base64</td>
      <td>&lt;base64&gt;SGFsbG8gV2VsdA==&lt;/base64&gt;</td>
      <td>Datos binarios codificados de acuerdo con el sistema Base64</td>
    </tr>
    <tr>
      <td>boolean</td>
      <td>&lt;boolean&gt;1&lt;/boolean&gt;</td>
      <td>Variable booleana (true = 1 vs. false = 0)</td>
    </tr>
    <tr>
      <td>dateTime.iso8601</td>
      <td>&lt;dateTime.iso8601&gt;20200414T16:23:55&lt;/dateTime.iso8601&gt;</td>
      <td>Fecha y hora en formato ISO 8601</td>
    </tr>
    <tr>
      <td>double</td>
      <td>&lt;double&gt;-0.32653&lt;/double&gt;</td>
      <td>Coma flotante de doble precisión (64 bits)</td>
    </tr>
    <tr>
      <td>integer</td>
      <td>&lt;int&gt;32&lt;/int&gt; o &lt;i4&gt;32&lt;/i4&gt;</td>
      <td>Tipo de dato entero</td>
    </tr>
    <tr>
      <td>string</td>
      <td>&lt;string&gt;¡Hola a todos!&lt;/string&gt;</td>
      <td>Cadena de caracteres; puede contener bytes nulos</td>
    </tr>
    <tr>
      <td>struct</td>
      <td>&lt;struct&gt;&lt;data&gt;…&lt;/data&gt;&lt;/struct&gt;</td>
      <td>Se compone de pares de valores clave (en este caso, las claves son cadenas de caracteres y los valores pueden ser de cualquier tipo)</td>
    </tr>
  </tbody>
</table>

Si han de unirse varios valores o tipos de datos, la notación XML-RPC provee dos opciones: “**array**” y “**struct**”. Con la primera opción, los datos se ordenan en un listado, y, mediante “**struct**”, se presentan al servidor pares de valores clave previamente estructurados, tal como ilustramos en el ejemplo siguiente:

```none
<struct>
    <member>
        <name>Entrada 1</name>
        <value><int>1</int></value>
    </member>
    <member>
        <name>Entrada 2</name>
        <value><int>2</int></value>
    </member>
</struct>
```

Nota Algunos lenguajes que tienen implementaciones XML-RPC, como Java, también ofrecen la opción de **especificar valores cero**. Para ello, en el documento XML deberá utilizarse siempre el tipo de dato ***nil***, que, sin embargo, no forma parte oficialmente de la especificación XML-RPC y no es compatible con todos los servidores.

## Aplicaciones de XML-RPC

XML-RPC no tiene un papel demasiado importante en las redes de comunicación actuales. Desde su lanzamiento en 1998, este formato de intercambio ha demostrado ser **demasiado rígido**, entre otras cosas, debido a su **limitada escalabilidad** y al hecho de que no puede transferir sus propias estructuras XML. Como resultado del excesivo **tiempo necesario para la conversión** se hizo necesaria la búsqueda de una solución nueva y rápida que funcionara conjuntamente con el ya mencionado SOAP (también desarrollado por el equipo de Winer en colaboración con Microsoft).

Sin embargo, hoy en día todavía hay aplicaciones web que tienen una **interfaz XML-RPC**, entre otras cosas, para facilitar el intercambio de datos con proveedores de servicios externos. Incluso los [sistemas de gestión de contenidos](https://www.ionos.com/es-us/digitalguide/hosting/cms/cms-en-comparativa-los-gestores-de-contenido-mas-usados/ "CMS en comparativa: los gestores de contenido más usados"), como [WordPress](https://www.ionos.com/es-us/digitalguide/hosting/cms/que-es-wordpress-una-perspectiva-sobre-el-cms/ "¿Qué es WordPress?: una perspectiva sobre el CMS"), a menudo incorporan una interfaz XML-RPC para el **intercambio con otros servicios web**. Además, el formato de intercambio es la base de la llamada **tecnología *pingback***, que lleva años al servicio de los escritores de blogs como herramienta importante para configurar enlaces –en nuestro artículo [Qué hay detrás de los métodos de pingback y trackback](https://www.ionos.com/es-us/digitalguide/hosting/blogs/pingback-y-trackback-conceptos-basicos/ "Pingback y trackback: conceptos básicos") encontrarás más información sobre este tema.

## Ejemplo de una solicitud simple al servidor con XML-RPC

Para terminar, nada mejor que un ejemplo para ilustrar la comunicación cliente-servidor a través de una interfaz XML-RPC. La **solicitud HTTP del cliente** sería como sigue:

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

En el **contenedor** *methodCall*, en este caso, se activa la función *statustest* que, por su parte, está definida en el contenedor *methodName*. Como **parámetro**, la función devuelve como valor el número entero *10*.

Una posible **respuesta del servidor** a este ***statustest*** podría ser esta:

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

En este ejemplo, la respuesta simple del servidor es ***Status: OK***.


This is a markdown version of: [https://www.ionos.com/es-us/digitalguide/paginas-web/desarrollo-web/que-es-xml-rpc/](https://www.ionos.com/es-us/digitalguide/paginas-web/desarrollo-web/que-es-xml-rpc/) for AI/LLM consumption.