miércoles, 25 de enero de 2012

Webservices con PHP

El uso de webservices se ha generalizado en la red debido al uso de diferentes tecnologías en sistemas globales y la necesidad de comunicación entre diversos componentes. A alguien en algún momento se le ocurrió: "Bueno, si el protocolo más utilizado para transmitir datos a través de internet es el http, porque no hacemos un estandar para la comunicación de nuestras aplicaciones que se hagan por medio de ese protocolo, sin importar en que lenguaje o plataforma estén corriendo"... y ¡gualá! aparecieron los estandares para el uso de Webservices en las aplicaciones modernas.

Se supone, que un webservice debidamente hecho y que cumpla con los estándares establecidos, será capaz de proporcionar un recurso para cualquier aplicación bajo cualquier lenguaje que soporte clientes de webservices. Para este ejemplo de uso de webservices es bueno que estemos familiarizados con conceptos de: HTML, XML, WSDL,SOAP y PHP.

En este caso vamos a crear un webservice de lo más sencillo utilizando PHP. Vamos a utilizar dos formas, una por medio de la librería nativa de PHP para crear un servidor SOAP y otra utilizando una librería que ya tiene un buen tiempo que funciona para hacer webservice de manera fácil y rápida en PHP llamada NuSOAP.

Ejemplo Webservice con PHP y NuSOAP

Aquí un ejemplo de servidor webservice que llamaremos serverNuSOAP.php usando la librería de NuSOAP que se descarga de su sitio. Para su funcionamiento necesitamos tener en el mismo lugar el directorio con la librería NuSOAP para que funcione la linea de require_once('lib/nusoap.php'); .

Teniendo nuestro archivo en un servidor Apache con PHP y con los módulos SOAP habilitados, podemos acceder a la especificación WSDL por medio de http://midominio/serverNuSOAP.php?wsdl y NuSOAP nos generará automáticamente el archivo WSDL.

Ahora vamos a ver un pequeño cliente (cliente.php) que utilice este servicio:
De esta manera accedemos al servicio publicado.

Ejemplo Webservice sólo con PHP

Ahora un ejemplo utilizando solo las librerías de PHP. Incluyo esto porque, aunque la librería de NuSOAP hace las cosas realmente fáciles, no es una librería estándar, es un esfuerzo hecho por terceros que no se encuentra completamente actualizado y además, leí por ahí, que no permite utilizar ciertas herramientas para mantener la seguridad en nuestros Webservices. En fin, aquí el ejemplo de como sería un servidor muy sencillo del webservice al que llamaremos servicio.php:

Este servicio lo podríamos consumir de la misma manera que el anterior, sin embargo al no tener un archivo WSDL con las definiciones pertinentes lo consumiremos a través de un cliente al que llamaremos clientephp.php:

Este ejemplo funciona perfectamente con clientes PHP, sin embargo hay problemas con aplicaciones hechas con otros lenguajes, como C# por ejemplo. Si queremos utilizar nuestro servicio desde cualquier cliente es importante tener publicado el archivo WSDL, que en este caso tendríamos que generar a patín o por medio de algún generador de WSDL. Java y C# pueden generar el archivo WSDL al vuelo en la forma que lo hace NuSOAP, pero no he encontrado la manera de hacerlo a través de las librerías nativas de SOAP para PHP, si alguien tiene algún ejemplo sería muy útil que lo pudiera compartir.

Les anexo un par de ejemplos más:
Ejemplo sencillo
Otro ejemplo sencillo

Un par de herramientas para generar WSDL con PHP. Yo he utilizado Katy (wsdl-writer) y es fácil de implementar, aunque creo que el proyecto ya no esta en mantenimiento. De cualquier manera son alternativas fáciles para una tarea, que al hacerlo a patín, resulta ser de lo mas engorrosa.
WSDL Generator
wsdl-writer


Hasta aquí llegamos el día de hoy Javer@s.... hasta la vista....