XML-RPC desde PHP

Escrito el 31 Enero, 2001 – 10:01 | por storm | 4.236 lecturas

XML-RPC es una interesante alternativa para desarrollar aplicaciones distribuidas a traves de la web. Ez dispone de un kit gratuito muy simple para desarrollar tanto clientes como servidores de XML-RPC en PHP. En este articulo Baard Farstad de zez.org describe como crear clientes y servidores XML-RPC desde PHP y ademas desde el articulo es posible downlodear el soft necesario.

Communicating with XML-RPC


Bård Farstad

System programmer, zez.org

Este articulo nos mostrara una forma facil y sencilla de escribir un servidor y cliente XML-RPC usando el paquete
de software xmlrpc de ez. Que puede bajarse desde aqui ezxmlrpc-1.0-Beta.1.tar.gz

Que es XML-RPC

XML-RPC es una implementacion del protocolo de procedimientos remotos (RPC=Remote procedure call) usando XML y HTTP como agente de transporte. Los requests y las respuestas son definidos en XML. Para consultar la especificacion de XML-RPC puede acudirse a la siguiente URL: XML-RPC spec. El protocolo permite la comunicacion sobre diferentes sistemas operativos y diferentes lenguajes.

El servidor

El fragmento de codigo a continuacion muestra como puede implementarse un servidor simple usando el paquete ez xmlrpc. El servidor tiene una funion “myFunc” que devuelve un string. Este es el ejemplo mas simple de servidor xml-rpc.

ob_start();

// include the server
include_once( "ezxmlrpc/classes/ezxmlrpcserver.php" );

// include the datatype(s) we need
include_once( "ezxmlrpc/classes/ezxmlrpcstring.php" );

$server = new eZXMLRPCServer( );

$server->registerFunction( "myFunc" );

// process the server requests
$server->processRequest();

function myFunc( )
{
    return new eZXMLRPCString( "This command was run by xml rpc" );
}
ob_end_flush();

Como pueden observar, solo tenemos que crear una funcion y registrar la funcion al server usando $server->registerFunction(). Para implementar la funcion escribimos una funcion PHP normal, que devuelve un tipo de datos
ezXMLRPC valido: exXMLRPCInt, ezXMLRPCString, eZXMLRPCBool, eZXMLRPCDouble, eZXMLRPCBase64, eZXMLRPCArray o eZXMLRPCStruct.

Si queremos pasar parametros a la funcion podemos agregarlos usando el segundo parametro para registerFunction()

Para registrar una funcion que toma como parametro un entero escribimos el sgiuiente codigo. Es sencillo trabajar con funciones que reciben tantos parametros como sea necesario.

// register the function
$server->registerFunction( "foo", array( new eZXMLRPCInt() ) );

// implement the function
function foo( $args )
{
    $tmp = new eZXMLRPCString( "You sendt me: " . $args[0]->value() );
    return $tmp;
}

El cliente

EL fragmento de codigo a continuacion muestra como podemos crear un cliente XML-RPC. Se crea un objeto cliente que es responsable de comunicarse con el servidor. La llamada define que funcion queremos solicitarle al servidor y que parametros le pasamos. Cuando se efectua la llamada se obtiene una respuesta, si la respuesta es un error se puede recuperar el mensaje de error y su numero.

include_once( "ezxmlrpc/classes/ezxmlrpcclient.php" );
include_once( "ezxmlrpc/classes/ezxmlrpccall.php" );

include_once( "ezxmlrpc/classes/ezxmlrpcstring.php" );

// create a new client
$client = new eZXMLRPCClient( "your.domain.com", "/xmlrpc/minimalserver.php" );

// create a new call
$call = new eZXMLRPCCall( );
$call->setMethodName( "myFunc" );

// send the request
$response = $client->send( $call );

// check for fault
if ( $response->isFault() )
{
    print( "The server returned an error (" .  $response->faultCode() . "): ".
           $response->faultString() .
           "" );
}
else
{
    // print out the results
    $result = $response->result();

    print( "The server returned: " . $result->value() . "" );
}

Como seguir

Ahora ya sabemos como implementar servidoress y clientes para realizar procesamiento distribuido. Hay varias formas formas de usar XML-RPC para comunicacion entre sites. E incluso podria escribirse un inteprete de linea de comandos que ejecute procesamientos en un determinado servidor RPC.

zez.org esta usando XML-RPC en un proyecto para un webshop aleman en donde XML-RPC es usado para imprimir ordenes en papel a medida que son enviadas a eZ publish.

Bård Farstad

La nota original de Bard fue publicada en zez.org y puede consultarse siguiendo este link. Bard y zez nos han autorizado a publicar esta version en castellano del articulo por lo cual les agradecemos mucho.

You must be logged in to post a comment.

Buscar: