Inicio Desarrollo Web Implementar XML-RPC en PHP

Implementar XML-RPC en PHP

Algo que interesante de WordPress es que podemos escribir nuevos contenidos a través de software de escritorio como, por citar un ejemplo, Windows Live Writer. Aunque en realidad WordPress no es único CMS que provee está característica, a través de éste me di cuenta que usa un archivo llamado xmlrpc.php. Me puse averiguar estos términos: XML-RPC. En Wikipedia encontramos una definición más que satisfactoria:

… es un protocolo de llamada a procedimiento remoto que usa XML para codificar los datos y HTTP como protocolo de transmisión de mensajes.

Es un protocolo muy simple ya que sólo 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 está en contraste con la mayoría de protocolos RPC que tiene una documentación extensa y requiere considerable soporte de software para su uso.

[…]

Existen implementaciones para varios sistemas operativos, lenguajes de programación, licencias comerciales y de software libre.

Llamar a procedimientos remotos usando XML enviandolo por HTTP. Así podía entender mejor como las aplicaciones de escritorio para escribir contenidos en los blogs funcionaban. Eso quiere decir que puedo enviar datos de un aplicación hecha con cierto lenguaje de programación a otra aplicación desarrollada con un lenguaje distinto usando este protocolo.

Como menciona la definición XMLRPC: existen implementaciones para varios lenguajes de programación. Lo cual nos indica que algunos lenguajes no traen de forma nativa funciones que manejen este protocolo, por lo que se ayudan de algunas librerías extras (ver cómo podemos implementar con distintos lenguajes de programación).

En el caso de PHP existen muchas librerías para implementar XML-RPC, y así usarlo en nuestras aplicaciones. Una de estas, y que me parecio simple de usar, es phpxmlrpc

Para mostrar el funcionamiento, veamos el siguiente ejemplo, que por cierto lo encontre en un blog en español, aunque hize algunas pequeñas modificaciones para que funcionará correctamente.

En la parte del cliente se mostrará un formulario donde permita escribir el código ISBN de un libro. Se usará la librería phpxmlrpc para pedir información remota de un procedimiento que se encuentra en el servidor web.

dv_cliente.php

<form name="form1" method="post" action="dv_cliente.php">
<input type="text" name="txtIsbn">
<input type="submit" name="Submit" value="Buscar">
</form>
<?php
include("lib/xmlrpc.inc");
if (isset($HTTP_POST_VARS["txtIsbn"])){
$f=new xmlrpcmsg('libros.buscaIsbn',array(new xmlrpcval($HTTP_POST_VARS["txtIsbn"], "int")));

print "<pre>".htmlentities($f->serialize())."</pre>\n";
//$c=new xmlrpc_client("dv_servidor.php", "pecesama.ipowermysql.com", 80);

$c=new xmlrpc_client("http://localhost/xml-rpc/dv_servidor.php");

$c->setDebug(0);
$r=$c->send($f);
if(!$r){
die("Falló SEND");
}

$v=$r->value();

if(!$r->faultCode()){
print "Título del libro ".$HTTP_POST_VARS["txtIsbn"]." es ".$v->scalarval()."<BR>";
}else{
print "Falla: ";
print "Número de error: " .$r->faultCode()." Descripción del error '".$r->faultString()."'<BR>";
}
}
?>

Ahora la parte del procedimiento en el servidor, es una función en PHP que recibirá datos de tipo entero. En este caso el ISBN de cierto libro. 

dv_servidor.php

<?php
//Ejemplo de un servidor XML-RPC en PHP
//Recibe un ISBN y regresa el Título //del libro.
include("lib/xmlrpc.inc");
include("lib/xmlrpcs.inc");

function BuscaIsbn($NoIsbn) {
global $NoError;
$err="";

// Obtenemos el parametro
$ParIsbn=$NoIsbn->getParam(0);

// Vemos si es del tipo correcto
if(isset($ParIsbn) && ($ParIsbn->scalartyp()=="int")){
// Obtenemos el valor numerico
$isbn=$ParIsbn->scalarval();
// Buscamos el libro
switch($isbn){
case 1: $titulo="PHP";
break;
case 2: $titulo="XML_RPC";
break;
case 3: $titulo="Sitios web";
break;
case 4: $titulo="Linux";
break;
default:$NoError=1;
$err="No hay libro ". "con el ISBN '". $isbn . "'";
}
}else {
// No es entero
$err="Se requiere un número";}

// Creamos la respuesta
if ($err){
// Si hay error
return new xmlrpcresp(0, $NoError, $err);
}else{
// Si no hay error
return new xmlrpcresp(new xmlrpcval($titulo));
}
}

//Creamos el servidor
$s=new xmlrpc_server(array("libros.buscaIsbn" =>array("function" => "BuscaIsbn")));
?>

Para probar simplemente accede al archivo dv_cliente.php por web y escribe un numero cualquier y el procedimiento remoto mostrará la información pertinente.Y he allí el funcionamiento de XML-PHP implementado en PHP.

Aca hemos visto de manera muy rápida, al vuelo, sobre este protocolo: una definición y un ejemplo a lo práctico. En proximos artículos ahondaremos más sobre el tema. Si conoces algo de XML-RPC pues ¿por qué no compartirlo?

Sitio oficial de XML-RPC

Programador y Desarrollador Web. Administrador de RibosoMatic y Proyecto Yupy. Blogger y entusiasta de la tecnología, internet, software y tutoriales para desarrollo de aplicaciones para la web ....