El presente artículo esta dirigido a las personas que ya poseen conocimientos sobre Internet y programación y quieren comenzar a conocer el mundo de los web services (servicios web).
Antes de comenzar con lo que es NuSoap creo que es conveniente realizar una introducción a lo que son los Servicios Web, y para esto debemos comenzar con la definición de Web Service.
Web Service: es un sistema software diseñado para soportar la interoperabilidad máquina – máquina a través de una red. Este tiene una interfaz descripta en un formato que puede ser procesado por una máquina (específicamente WSDL, que veremos más adelante). Otros sistemas interactúan con el Web service utilizando mensajes SOAP los cuales se encuentran establecidos previamente.
Entonces podríamos decir que un Web Service es una comunicación por medio de mensajes SOAP entre diferentes equipos a través de una red.
SOAP – Simple Object Access Protocol
Es un protocolo de comunicación, el cual permite la comunicación entre aplicaciones a través de mensajes por medio de Internet. Es independiente de la plataforma, y del lenguaje. Esta basado en XML y es la base principal de los Web Services. Los mensajes SOAP son documento XML propiamente dicho, pero esto lo veremos más adelante cuando veamos un ejemplo de un mensaje SOAP.
WSDL – Web Services Description Language
Es un protocolo basado en XML que describe los accesos al Web Service. Podriamos decir que es el manual de operación del web service, porque nos indica cuales son las interfaces que provee el Servicio web y los tipos de datos necesarios para la utilización del mismo.
¿Que es NuSOAP?
NuSOAP es un kit de herramientas (ToolKit) para desarrollar Web Services bajo el lenguaje PHP. Esta compuesto por una serie de clases que nos harán mucho más fácil el desarrollo de Web Services. Provee soporte para el desarrollo de clientes (aquellos que consumen los Web Services) y de servidores (aquellos que los proveen). NuSOAP esta basado en SOAP 1.1, WSDL 1.1 y HTTP 1.0/1.1
No es el único soporte para Web Services en PHP, existen otros, pero es uno de los que están en una fase de desarrollo mucho más avanzada. Sin ir más lejos, PHP a partir de su versión 5 comienza a dar soporte para SOAP, pero aun esta en fase experimental.
La instalación es bastante sencilla, solo basta ir a la pagina en sourceforge de NuSOAP http://sourceforge.net/projects/nusoap/ y bajar el archivo comprimido (es un .zip).
Lo descomprimimos en un directorio de nuestro servidor web (como puede ser /lib que es el directorio por default), y listo, ya podemos hacer uso de NuSOAP.
Ejemplo de servicios web utilizando nusoap
Les mostrare la forma de usar nusoap para aplicaciones de servicios web usando wsdl.
ejemplo : nusoap usando wsdl
(Como proveedor del servicio web)
1.- Incluimos la libreria nusoap dentro de nuestro archivo
require_once(‘lib/nusoap.php’);
2.- Creamos la instancia al servidor
$server = new soap_server();
3.- Inicializamos el soporte WSDL
$server->configureWSDL(‘hellowsdl2′, ‘urn:hellowsdl2′);
4.- Registramos la estructura de datos usado por el servicio
// Parametros de entrada
$server->wsdl->addComplexType(
‘Person’,
‘complexType’,
’struct’,
‘all’,
”,
array(
‘firstname’ => array(‘name’ => ‘firstname’, ‘type’ => ‘xsd:string’),
‘age’ => array(‘name’ => ‘age’, ‘type’ => ‘xsd:int’),
‘gender’ => array(‘name’ => ‘gender’, ‘type’ => ‘xsd:string’)
)
);
// Parametros de salida
$server->wsdl->addComplexType(
‘SweepstakesGreeting’,
‘complexType’,
’struct’,
‘all’,
”,
array(
‘greeting’ => array(‘name’ => ‘greeting’, ‘type’ => ‘xsd:string’),
‘winner’ => array(‘name’ => ‘winner’, ‘type’ => ‘xsd:boolean’)
)
);
5.- Registramos el metodo a exponer
$server->register(‘hello’, // method name
array(‘person’ => ‘tns:Person’), // input parameters
array(‘return’ => ‘tns:SweepstakesGreeting’), // output parameters
‘urn:hellowsdl2′, // namespace
‘urn:hellowsdl2#hello’, // soapaction
‘rpc’, // style
‘encoded’, // use
‘Greet a person entering the sweepstakes’ // documentation
);
6.- Definimos el metodo como una función PHP
function hello($person) {
global $server;
$greeting = ‘Hello, ‘ . $person['firstname'] .
‘. It is nice to meet a ‘ . $person['age'] .
‘ year old ‘ . $person['gender'] . ‘.’;
if (isset($_SERVER['REMOTE_USER'])) {
$greeting .= ‘ How do you know ‘ . $_SERVER['REMOTE_USER'] . ‘?’;
}
$winner = $person['firstname'] == ‘Scott’;
return array(
‘greeting’ => $greeting,
‘winner’ => $winner
);
}
7.- Usamos el pedido para invocar el servicio
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : ”;
$server->service($HTTP_RAW_POST_DATA);
(Como cliente, consumidor del servicio web)
——————————————-
1.- Incluimos la libreria nusoap dentro de nuestro archivo
require_once(‘lib/nusoap.php’);
2.- Creamos la instancia como cliente
$client = new soapclient(‘http://localhost/phphack/hellowsdl2.php?wsdl’, true);
3.- Chekeamos para un posible error
$err = $client->getError();
if ($err) {
// Display the error
echo ‘<h2>Constructor error</h2><pre>’ . $err . ‘</pre>’;
// At this point, you know the call that follows will fail
}
4.- Llamamos al metodo soap
$person = array(‘firstname’ => ‘Willi’, ‘age’ => 22, ‘gender’ => ‘male’);
$result = $client->call(‘hello’, array(‘person’ => $person));
5.- Chekeamos para una falla al momento de llamar al metodo
if ($client->fault) {
echo ‘<h2>Fault</h2><pre>’;
print_r($result);
echo ‘</pre>’;
} else {
// Check for errors
$err = $client->getError();
if ($err) {
// Display the error
echo ‘<h2>Error</h2><pre>’ . $err . ‘</pre>’;
} else {
// Display the result
echo ‘<h2>Result</h2><pre>’;
print_r($result);
echo ‘</pre>’;
}
}
6.- Una vez que todo este bien obtenemos la información deseada del servicio a travez del metodo que hemos invocado
se pude ver los pedidos y respuestas de esta manera:
echo ‘<h2>Request</h2>’;
echo ‘<pre>’ . htmlspecialchars($client->request, ENT_QUOTES) . ‘</pre>’;
echo ‘<h2>Response</h2>’;
echo ‘<pre>’ . htmlspecialchars($client->response, ENT_QUOTES) . ‘</pre>’;
// Display the debug messages
echo ‘<h2>Debug</h2>’;
echo ‘<pre>’ . htmlspecialchars($client->debug_str, ENT_QUOTES) . ‘</pre>’;