XML-RPC (Remote Procedure Call) es unprotocolo de llamada a procedimiento remoto que usaXML para codificar los datos yHTTP como protocolo de transmisión de mensajes.[1]
Es un protocolo muy simple ya que solo define unos cuantos tipos de datos y comandos útiles, además de una descripción completa de corta extensión. La simplicidad del XML-RPC contrasta con la mayoría de protocolos RPC que tiene una documentación extensa y requiere considerable soporte de software para su uso.
Fue creado por Dave Winer de la empresa UserLand Software en asociación conMicrosoft en el año 1998. Al considerar Microsoft que era muy simple decidió añadirle funcionalidades, tras las cuales, después de varias etapas de desarrollo, el estándar dejó de ser sencillo y se convirtió en lo que es actualmente conocido comoSOAP. Una diferencia fundamental es que en los procedimientos enSOAP los parámetros tienen nombre y no interesa su orden, no siendo así enXML-RPC.[2]
Según la especificación deXML-RPC,[3] los principales tipos de datos son:
Nombre | Tags de ejemplo | Descripción |
---|---|---|
array | <array><data><value><i4>1404</i4></value><value><string>Algoaquí</string></value><value><i4>1</i4></value></data></array> | Array de valores, sin almacenar claves |
base64 | <base64>eW91IGNhbid0IHJlYWQgdGhpcyE=</base64> | Datos binarios codificados en base 64 |
boolean | <boolean>1</boolean> | Valor lógico (0 o 1) |
date/time | <dateTime.iso8601>19980717T14:08:55</dateTime.iso8601> | Día y hora |
double | <double>-12.53</double> | Número de punto flotante de doble precisión |
integer | <i4>42</i4> o <int>42</int> | Número entero |
string | <string>Holamundo</string> | String (cadena) de caracteres. Debe seguir la codificaciónXML. |
struct | <struct><member><name>foo</name><value><i4>1</i4></value></member><member><name>bar</name><value><i4>2</i4></value></member></struct> | Array de valores, almacenando claves |
nil | <nil/> | Valor nulo; una extensión XML-RPC |
<?xml version="1.0"?><methodCall><methodName>org.wikipedia.intercambioDatos</methodName><params><param><value><i4>360</i4></value></param><param><value><i4>221</i4></value></param></params></methodCall>
<?xml version="1.0"?><methodResponse><params><param><value><string>Intercambiodatosnro.360por221</string></value></param></params></methodResponse>
Existen implementaciones para varios sistemas operativos, lenguajes de programación, licencias comerciales y de software libre:[4]C/C++,Delphi,Frontier,Guile,Java,Lisp,Microsoft .NET,Perl,PHP,Python,Real Basic,Rebol,Tcl,WebObjects yZope.
Algunas implementaciones conocidas son: