XML-RPC es un protocolo de llamada a procedimiento remoto (RPC) que utiliza XML para codificar sus llamadas y HTTP como mecanismo de transporte. [1]
El protocolo XML-RPC fue creado en 1998 por Dave Winer de UserLand Software y Microsoft [2] , y Microsoft consideró que el protocolo era una parte esencial para ampliar sus esfuerzos en el comercio electrónico entre empresas. [3] A medida que se introdujeron nuevas funciones, el estándar evolucionó hasta convertirse en lo que hoy es SOAP . [4]
UserLand admitió XML-RPC a partir de la versión 5.1 de su sistema de gestión de contenido web Frontier, [4] lanzado en junio de 1998. [5]
La idea de XML-RPC de un estándar legible y escribible por humanos, y analizable mediante scripts para solicitudes y respuestas basadas en HTTP también se ha implementado en especificaciones competidoras como Web Distributed Data Exchange (WDDX) de Allaire y Web Interface Definition Language (WIDL) de webMethod. [6] La tecnología anterior que envolvía objetos COM , CORBA y Java RMI en sintaxis XML y los transportaba a través de HTTP también existía en la tecnología WebBroker de DataChannel. [7] [8]
El uso genérico de XML para llamadas a procedimientos remotos (RPC) fue patentado por Phillip Merrick, Stewart Allen y Joseph Lapp en abril de 2006, y reclamaron el beneficio de una solicitud provisional presentada en marzo de 1998. La patente fue asignada a webMethods , con sede en Fairfax, Virginia . La patente expiró el 23 de marzo de 2019. [9]
En XML-RPC, un cliente realiza una RPC enviando una solicitud HTTP a un servidor que implementa XML-RPC y recibe la respuesta HTTP. Una llamada puede tener varios parámetros y un resultado. El protocolo define algunos tipos de datos para los parámetros y el resultado. Algunos de estos tipos de datos son complejos, es decir, están anidados. Por ejemplo, puede tener un parámetro que sea una matriz de cinco números enteros.
La estructura de parámetros/resultados y el conjunto de tipos de datos están pensados para reflejar aquellos utilizados en lenguajes de programación comunes.
La identificación de los clientes con fines de autorización se puede lograr mediante métodos de seguridad HTTP populares. Se puede utilizar la autenticación de acceso básica para la identificación y autenticación.
En comparación con los protocolos RESTful, donde se transfieren representaciones de recursos (documentos), XML-RPC está diseñado para llamar a métodos . La diferencia práctica es simplemente que XML-RPC es mucho más estructurado, lo que significa que se puede usar un código de biblioteca común para implementar clientes y servidores y hay menos trabajo de diseño y documentación para un protocolo de aplicación específico. [ cita requerida ] Una diferencia técnica destacada entre los protocolos RESTful típicos y XML-RPC es que muchos protocolos RESTful usan el URI HTTP para la información de parámetros, mientras que con XML-RPC, el URI solo identifica al servidor.
JSON-RPC es similar a XML-RPC.
Los tipos de datos comunes se convierten en sus equivalentes XML con valores de ejemplo que se muestran a continuación:
Un ejemplo de una solicitud XML-RPC típica sería:
<?xml version="1.0"?> <methodCall> <methodName> ejemplos.getStateName </methodName> <params> <param> <value><i4> 40 </i4></value> </param> </params> </methodCall>
Un ejemplo de una respuesta XML-RPC típica sería:
<?xml version="1.0"?> <methodResponse> <params> <param> <value><string> Dakota del Sur </string></value> </param> </params> </methodResponse>
Un error típico de XML-RPC sería:
<?xml version=" 1.0 "?> <methodResponse> <fault> <value> <struct> <member> <name> faultCode </name> <value><int> 4 </int></value> </member> <member> <name> faultString </name> <value><string> Demasiados parámetros. </string></value> </member> </struct> </value> </fault> </methodResponse>
Los críticos recientes (a partir de 2010) de XML-RPC sostienen que las llamadas RPC se pueden realizar con XML simple y que XML-RPC no agrega ningún valor sobre XML. Tanto XML-RPC como XML requieren un modelo de datos a nivel de aplicación, como qué nombres de campo se definen en el esquema XML o los nombres de parámetros en XML-RPC. Además, XML-RPC utiliza aproximadamente 4 veces la cantidad de bytes en comparación con XML simple para codificar los mismos objetos, lo que es en sí mismo verboso en comparación con JSON . [10] [11] [12]