Web Services: XML-RPC, SOAP, sobre PHP, Perl, y otros conceptos

Ya hemos visto como funciona XML-RPC sobre PHP. El otro protocolo de Servicios Web es SOAP. SOAP tambi�n puede ser utilizado desde PHP. Aunque XML-RPC es m�s sencillo y m�s "Unix-Friendly", hay que reconocer que la mayor�a de los Servicios Web p�blicos e interesantes de hoy en d�a, est�n definidos bajo el est�ndar SOAP. Es por eso, especialmente interesante saber como invocar uno de estos servicios desde SOAP.

Como hemos podido ver con XML-RPC, crear un Servicio Web es m�s complicado que invocarlo. En SOAP pasa lo mismo. Veamos la parte sencilla, y la m�s �til, o sea, su invocaci�n.

La implementaci�n de SOAP sobre PHP m�s recomendable es NuSOAP, que podemos descargar.

Est� desarrollada por la empresa NuSphere y licenciada bajo LGPL.

Ponerla en marcha es tan sencillo como teclear este simple script en PHP de ejemplo:

#!/usr/local/bin/php -q 
<?php 
require_once('nusoap-0.6.1/nusoap.php'); 
$soapclient = new soapclient(
'http://services.xmethods.net/soap/urn:xmethods-delayed-quotes.wsdl', 'wsdl');
echo $soapclient->call('getQuote',array('symbol'=>'ibm')); 
?>

As� de sencillo es obterner la cotizaci�n en bolsa de las acciones de IBM en un programa en PHP utilizando un Servicio Web SOAP. Viendo este c�digo, nos preguntaremos qu� es eso de WSDL que sale en un sitio y en otro cada vez que hablamos de SOAP. Tal como se hace en CORBA o en COM, SOAP usa un lenguaje de definici�n de servicios para Web (WSDL = Web Services Definition Language), en donde se definen los servicios a publicar, los tipos de datos a retornar, as� como otras caracter�sticas de los servicios. El WSDL es un borrador (no est� completamente aprobado por el W3C), aunque ya se usa en fase de explotaci�n de forma extensiva.

Resumiendo, WSDL es equivalente a la URL en los servicios XML-RPC. Es la direcci�n de Internet donde hay que invocar el proceso que nos interesa.

Referencias:

Ahora un ejemplo un poco m�s sofisticado. Veamos c�mo implementar en PHP una llamada al generador de gr�ficas en Flash:

#!/usr/local/bin/php -q 
<?php 
require_once('nusoap-0.6.1/nusoap.php'); 

// Definimos los parametros de entrada 
$parameters = array( 

    "mainTitle"        =>"My Bar Chart Title", 
    "subTitle"        =>"Example SubTitle",     
    "xAxisTitle"    =>"x Axis Title", 
    "yAxisTitle"    =>"y Axis Title", 
    "sourceTitle"    =>"Source: Example Output from Service",         
    "minValue"        =>"0", 
    "maxValue"        =>"100", 
    "unitType"        =>" %",     
    "drawGrid"        =>"1", 
    "animate"        =>"1", 
    "show3D"        =>"1", 
    "dataArray"       =>"Apples:78.5,Oranges:34.8,Peaches:23.7,Pears:12.9" 
); 

// Se indica la URL del servicio SOAP mediante WSDL 
$soapclient = new soapclient('http://www.flash-db.com/services/ws/flashBarChart.wsdl',
'wsdl'); 

// Se invoca al Servicio Web SOAP 
$result     = $soapclient->call('doFlashBarChart',$parameters); 

// El resultado viene en formato binario base64 ... 
$binary = base64_decode($result); 

// Grabamos el fichero flash en el filesystem 
$movieName = "./NewChart.swf"; 
$fp = fopen($movieName,"w"); 
fwrite($fp, $binary, 12000); 
fclose( $fp ); 
?> 
Los Servicios Web codifican las variables de entrada y salida mediante tags y formatos estándar

El resultado obtenido, lo podemos visualizar en un navegador usando el siguiente c�digo HTML:

<OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" 
codebase=
"http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0" 
  WIDTH="500" HEIGHT="400"> 
<PARAM NAME=movie VALUE="NewChart.swf"> 
<PARAM NAME=quality VALUE=high> 
<PARAM NAME=bgcolor VALUE=#FFFFFF> 
<EMBED src="NewChart.swf" quality=high bgcolor=#FFFFFF  WIDTH="500" HEIGHT="400" 
TYPE="application/x-shockwave-flash" 
PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer"> 
</EMBED> 
</OBJECT> 

Otro ejemplo m�s, de gran utilidad es la invocaci�n a Google desde PHP. Google uno de los buscadores de m�s prestigio de la red ha incorporado recientemente la posibilidad de poder usar su base de datos de p�ginas desde cualquier herramienta de desarrollo.

El producto denominado "Google Web API" permite a los desarrolladores poder interrogar y tomar informaci�n de casi tres mil millones de documentos Web directamente desde Google. Para lograr eso, Google usa SOAP y WSDL de forma que los desarrolladores puedan programar en su entorno favorito tal como PHP, Java, Perl, o Visual Studio .NET.

Google Web API permite a los desarrolladores poder interrogar y tomar información de casi tres mil millones de documentos Web directamente desde Google

Veamos como se puede aprovechar la potencia de Google en nuestros scripts de PHP:

#!/usr/local/bin/php -q 
<?php 
require_once('nusoap-0.6.1/nusoap.php'); 

// Licencia de Google 
$key = 'iwnUXUtHj3bteg5FWfBJDwui3SPeB+iy'; 

// Por ejemplo ... 
$Query             = "linux+programaci�n"; 
$startPage         = 0; 

$parameters = array(  
            'key'         => $key,  
            'q'           => $Query,  
            'start'       => $startPage,  
            'maxResults'  => 10,  
            'filter'      => false,  
            'restrict'    => '',  
            'safeSearch'  => false,  
            'lr'          => '',  
            'ie'          => '',  
            'oe'          => ''       
);     

$soapclient = new soapclient('http://api.google.com/search/beta2'); 
$result = $soapclient->call('doGoogleSearch',$parameters, 'urn:GoogleSearch'); 
print_r ($result); 
?> 

El resultado es algo as�:

Array 
( 
    [documentFiltering] => false 
    [estimatedTotalResultsCount] => 77400 
    [directoryCategories] => 

    [searchTime] => 0.194757 
    [resultElements] => Array 
        ( 
            [0] => Array 
                ( 
                    [cachedSize] => 28k 
                    [hostName] => 
                    [snippet] => Programas y Aplicaciones de GNU/Linux 
                    [directoryCategory] => Array 
                        ( 
                            [specialEncoding] => 
                            [fullViewableName] => 
                        ) 

                    [relatedInformationPresent] => true 
                    [directoryTitle] => 
                    [summary] => 
                    [URL] => http://linux.bankhacker.com/software/Programacion/ 
                    [title] => Linux Programacion 
                ) 

            [1] => Array 
                ( 
                    [cachedSize] => 9k 
                    [hostName] => 
                    [snippet] =>  Hosting Linux y Programaci�n 
                    [directoryCategory] => Array 
                        ( 
                            [specialEncoding] => 
                            [fullViewableName] => 
                        ) 

                    [relatedInformationPresent] => true 
                    [directoryTitle] => 
                    [summary] => 
                    [URL] => http://linux.bankhacker.com/ 
                    [title] => Software Linux: Programas y Aplicaciones de 
GNU/Linux 
                ) 
            ... 
        ) 

    [endIndex] => 10 
    [searchTips] => 
    [searchComments] => 
    [startIndex] => 1 
    [estimateIsExact] => false 
    [searchQuery] => linux+programaci�n 
) 
En Perl, es también muy sencillo desarrollar un servicio XML-RPC

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP
SIGUIENTE ARTÍCULO