Web Services. El uso de PHP con NuSOAP.

Febrero 7th, 2007 by Eliurkis

¿Qué es un servicio web?

Un Servicio Web es una colección de protocolos y estándares que sirve para intercambiar datos entre aplicaciones. Distintas aplicaciones de software desarrolladas en lenguajes de programación diferentes, y ejecutadas sobre cualquier plataforma, soportando así la interoperabilidad máquina - máquina (interoperabilidad sintáctica) y el intercambio de datos entre redes de ordenadores.
Esta interoperabilidad se consigue mediante la adopción de estándares abiertos.

Estándares empleados

  • Web Services Protocol Stack: Es el conjunto de servicios y protocolos de los Servicios Web.
  • XML: Es el formato estándar usado para los datos que se vayan a ser intercambiados.
  • SOAP o XML-RPC: Protocolos sobre los que se establece el intercambio.
  • Otros protocolos: los datos en XML también pueden enviarse de una aplicación a otra mediante protocolos normales como HTTP, FTP, o SMTP.
  • WSDL: Es el lenguaje de la interfaz pública para los servicios Web. Es una descripción basada en XML de cómo debe establecerse la comunicación de los servicios Web. Es una descripción basada en XML de los requisitos funcionales necesarios para establecer una comunicación con los servicios Web.
  • UDDI: Protocolo para publicar la información de los servicios Web. Permite a las aplicaciones comprobar qué servicios web están disponibles.
  • WS-Security: Protocolo de seguridad aceptado como estándar por OASIS. Garantiza la autenticación de los actores y la confidencialidad de los mensajes enviados.

Pero, ¿qué es NuSOAP?

NuSOAP es una reescritura de SOAPx4, provista por NuSphere y Dietrich Ayala. Es un conjunto de clases (no se requiere ninguna extensión de PHP) que permiten a los desarrolladores crear y consumir servicios web basados en SOAP 1.1, WSDL 1.1 y HTTP 1.0/1.1.
La instalación es bastante sencilla, sólo basta con ir a la página en sourceforge de NuSOAP http://sourceforge.net/projects/nusoap/ y bajar el archivo comprimido. Lo descomprimimos en un directorio de nuestro servidor web (como puede ser “nusoap”), y listo, ya podemos hacer uso de NuSOAP.

¿Cómo lo usamos?

Para responder a esto, lo ideal sería realizar un ejemplo donde utilicemos NuSOAP, lo cual nos permitirá terminar de entender bien los conceptos relaciones con los Servicios Web. Primeramente partiremos de la idea de crear un servicio web, y posteriormente consumir el mismo.
El ejemplo que mostraremos es una aplicación simple, que me permita emitir un saludo a una persona indicada. Para crear este Servicio Web (server.php) con PHP usando NuSOAP es de la siguiente manera:

PHP:
  1. // Incluimos NuSoap
  2. require_once('../nusoap/nusoap.php');
  3.  
  4. // Crear una instancia del soap server
  5. $server = new soap_server();
  6.  
  7. // Inicializar el soporte para WSDL
  8. $server->configureWSDL('holawsdl', 'urn:holawsdl');
  9.  
  10. // Registrar el método
  11. $server->register('hola',               // nombre método
  12. array('nombre' => 'xsd:string'),    // parámetros de entrada
  13. array('return' => 'xsd:string'),    // parámetros de salida
  14. 'urn:holawsdl',                     // namespace
  15. 'urn:holawsdl#hola',                // soapaction
  16. 'rpc',                              // estilo
  17. 'encoded',                          // uso
  18. 'Saludar a quien se desee'          // documentación
  19. );
  20.  
  21. // Definir el método como una función PHP
  22. /**
  23. * Saludar a una persona
  24. *
  25. * @param string $nombre
  26. * @return string
  27. */
  28. function hola($nombre) {
  29. return 'Hola, ' . $nombre;
  30. }
  31.  
  32. // Usar la petición (en caso de existir) para invocar al servicio
  33. $HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '';
  34.  
  35. $server->service($HTTP_RAW_POST_DATA);

Con este código hemos creado un Servicio Web, que al ser invocado saluda a una persona indicada, ahora debemos crear una aplicación que consuma este Servicio Web (client.php).

PHP:
  1. // Incluimos la clase NuSoap
  2. require_once('../nusoap/nusoap.php');
  3.  
  4. // Dirección del servicio web
  5. $url = 'http://dev.deepinphp.com/ejemplos/webservices/server.php?wsdl';
  6.  
  7. // Creamos una instancia del objeto Soap en su modo Cliente
  8. $soapclient = new soapclient($url, TRUE);
  9.  
  10. // Función "hola" a llamar en el webservices
  11. $function = 'hola';
  12.  
  13. // Parámetros pasados a la función
  14. $params = array('nombre' => 'Pepe');
  15.  
  16. // Llamamos a la función publicada en el servicio web y devolvemos el resultado en $result
  17. $result = $soapclient->call($function , $params);
  18.  
  19. // Imprimimos el resultado
  20. print_r($result);

Y de esta forma, hemos creado una aplicación sencilla de creación y consumo de un Servicio Web en PHP, para mostrar ver su funcionamiento pueden hacerlo en http://dev.deepinphp.com/ejemplos/webservices/client.php

Conclusiones

Los Servicios Web pueden ser muy útiles en ciertos casos concretos de programación. Los expertos de marketing de empresas de software como Microsoft anuncian a bombo y platillo una revolución debido a la aparición de SOAP, WSDL, UDDI, etc. Sin embargo, no conviene creerse todo lo que cuentan. Hay que tener en cuenta que les interesa que sus clientes actualicen sus herramientas de desarrollo a la versión .NET
La única revolución que podemos vivir en relación a los Servicios Web es la de ver como los servidores de Internet hablan entre ellos, y cada día son más independientes del programador. Y eso es algo que va a pasar completamente desapercibido para el resto de los usuarios de Internet.
Si logramos que existan Servicios Web de utilidad, gratuitos y sencillos, este nuevo esquema de comunicación y programación tendrá futuro. Si por el contrario, montamos campañas comerciales y vendemos fantasías en torno a palabras bonitas e incomprensibles como UDDI, WSDL, SOAP, XML, etc, habremos perdido nuestro valioso tiempo.

Archivos de ejemplo

Puede descargar los archivos del ejemplo anterior en http://dev.deepinphp.com/ejemplos/webservices/ejemplo.zip (Incluye la clase NuSoap)

Actualizado: 3 de noviembre del 2008

Posted in PHP, Servicios Web | 24 Comments »