Acceder por acceso remoto a ciertas funciones en or­de­na­do­res que se en­cue­n­tran en otras redes o sistemas di­s­tri­bui­dos es una práctica común desde hace décadas. La idea básica de la te­c­no­lo­gía su­b­ya­ce­n­te RPC (Remote Procedure Calls) fue formulada ya en 1976 por James E. White en RFC 707, lo que lo convierte en un principio más antiguo que, por ejemplo, la World Wide Web.

Hecho

En 2015 Google de­sa­rro­lló el framework  gRPC para que RPC se ajustara a las es­tru­c­tu­ras de los sistemas in­fo­r­má­ti­cos actuales.

Una de las so­lu­cio­nes más populares para apro­ve­char las ventajas de las pe­ti­cio­nes RPC es XML-RPC, que permite realizar llamadas uti­li­za­n­do el protocolo HTTP(S) y el lenguaje de marcas ex­te­n­si­ble o Ex­te­n­si­ble Markup Language (XML). ¿En qué consiste esta es­pe­ci­fi­ca­ción, para qué se utiliza y cómo funciona exac­ta­me­n­te?

¿Qué es XML-RPC?

XML-RPC (abre­via­tu­ra de Ex­te­n­si­ble Markup Language Remote Procedure Call) es una es­pe­ci­fi­ca­ción de protocolo para realizar llamadas RPC (llamadas remotas en redes in­fo­r­má­ti­cas) con la ayuda del protocolo de red sin estado HTTP y el lenguaje de marcado XML que, en este caso, le otorga su nombre. Mientras que HTTP regula el tra­n­s­po­r­te de datos, XML se utiliza para la pre­se­n­ta­ción de dichos datos. En la de­te­r­mi­na­ción del estándar XML-RPC se valoró, sobre todo, el hecho de que se pudiera im­ple­me­n­tar sin gran esfuerzo en di­fe­re­n­tes lenguajes de pro­gra­ma­ción y pla­ta­fo­r­mas de sistemas.

Nota

La es­pe­ci­fi­ca­ción XML-RPC dispone ex­clu­si­va­me­n­te del protocolo HTTP no seguro para la tra­n­s­mi­sión de datos, aunque ac­tua­l­me­n­te existen va­ria­cio­nes bastante ex­te­n­di­das y aceptadas del estándar co­m­pa­ti­bles con HTTPS, que ofrece una seguridad mucho mayor al apostar por ce­r­ti­fi­ca­dos de seguridad SSL/TLS.

El de­sa­rro­lla­dor de software Dave Winer y su empresa UserLand Software, en estrecha co­la­bo­ra­ción con Microsoft, fueron los pri­n­ci­pa­les re­s­po­n­sa­bles de de­sa­rro­llar XML-RPC en 1998. Esta gran co­r­po­ra­ción no tardó en detectar el enorme potencial que tenía este nuevo estándar para promover sus propias re­la­cio­nes em­pre­sa­ria­les B2B. XML-RPC ha ido in­co­r­po­ra­n­do di­fe­re­n­tes y novedosas funciones a su gama de ca­ra­c­te­rí­s­ti­cas, derivando en el estándar conocido como SOAP (Simple Object Access Protocol) o protocolo simple de acceso a objetos, que se ha co­n­so­li­da­do 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 tra­n­s­fe­re­n­cia HTTP o, más co­n­cre­ta­me­n­te, el método POST de petición HTTP. 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 pa­rá­me­tros para la función deseada y la ejecuta. Como resultado, el servidor lo vuelve a em­pa­que­tar en un documento XML que se devolverá al cliente en forma de respuesta HTTP. XML-RPC soporta, por tanto, los si­guie­n­tes tipos de datos cuando entrega pa­rá­me­tros o recibe respuesta de un cliente:

Tipo de datos Ejemplo de etiqueta De­s­cri­p­ción
array <array><data>…</data></array> Lista que puede contener varios valores o tipos de datos
base64 <base64>SGFsbG8gV2VsdA==</base64> Datos binarios co­di­fi­ca­dos de acuerdo con el sistema Base64
boolean <boolean>1</boolean> Variable booleana (true = 1 vs. false = 0)
dateTime.iso8601 <dateTime.iso8601>20200414T16:23:55</dateTime.iso8601> Fecha y hora en formato ISO 8601
double <double>-0.32653</double> Coma flotante de doble precisión (64 bits)
integer <int>32</int> o <i4>32</i4> Tipo de dato entero
string <string>¡Hola a todos!</string> Cadena de ca­ra­c­te­res; puede contener bytes nulos
struct <struct><data>…</data></struct> Se compone de pares de valores clave (en este caso, las claves son cadenas de ca­ra­c­te­res y los valores pueden ser de cualquier tipo)

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 pre­via­me­n­te es­tru­c­tu­ra­dos, tal como ilu­s­tra­mos en el ejemplo siguiente:

<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 im­ple­me­n­ta­cio­nes XML-RPC, como Java, también ofrecen la opción de es­pe­ci­fi­car valores cero. Para ello, en el documento XML deberá uti­li­zar­se siempre el tipo de dato nil, que, sin embargo, no forma parte ofi­cia­l­me­n­te de la es­pe­ci­fi­ca­ción XML-RPC y no es co­m­pa­ti­ble con todos los se­r­vi­do­res.

Apli­ca­cio­nes de XML-RPC

XML-RPC no tiene un papel demasiado im­po­r­ta­n­te en las redes de co­mu­ni­ca­ción actuales. Desde su la­n­za­mie­n­to en 1998, este formato de in­te­r­ca­m­bio ha de­mo­s­tra­do ser demasiado rígido, entre otras cosas, debido a su limitada es­ca­la­bi­li­dad y al hecho de que no puede tra­n­s­fe­rir sus propias es­tru­c­tu­ras XML. Como resultado del excesivo tiempo necesario para la co­n­ve­r­sión se hizo necesaria la búsqueda de una solución nueva y rápida que fu­n­cio­na­ra co­n­ju­n­ta­me­n­te con el ya me­n­cio­na­do SOAP (también de­sa­rro­lla­do por el equipo de Winer en co­la­bo­ra­ción con Microsoft).

Sin embargo, hoy en día todavía hay apli­ca­cio­nes web que tienen una interfaz XML-RPC, entre otras cosas, para facilitar el in­te­r­ca­m­bio de datos con pro­vee­do­res de servicios externos. Incluso los sistemas de gestión de co­n­te­ni­dos, como WordPress, a menudo in­co­r­po­ran una interfaz XML-RPC para el in­te­r­ca­m­bio con otros servicios web. Además, el formato de in­te­r­ca­m­bio es la base de la llamada te­c­no­lo­gía pingback, que lleva años al servicio de los es­cri­to­res de blogs como he­rra­mie­n­ta im­po­r­ta­n­te para co­n­fi­gu­rar enlaces –en nuestro artículo Qué hay detrás de los métodos de pingback y trackback en­co­n­tra­rás más in­fo­r­ma­ción sobre este tema.

Ejemplo de una solicitud simple al servidor con XML-RPC

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

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

En el co­n­te­ne­dor me­tho­d­Ca­ll, en este caso, se activa la función sta­tu­s­te­st que, por su parte, está definida en el co­n­te­ne­dor me­tho­d­Na­me. Como parámetro, la función devuelve como valor el número entero 10.

Una posible respuesta del servidor a este sta­tu­s­te­st podría ser esta:

<?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.

Ir al menú principal