Dokeos Móvil

Julio 3, 2009

En los ultimos 2 años la web movil ha experimentado un fuerte crecimiento, tanto en términos de número de usuarios web con acceso desde un teléfono móvil, y el número de sitios web en linea accesibles.

Es claramente un momento emocionante para la web móvil y de Internet para móviles en general.

Dokeos en su versión corporativa ofrece funcionalidades a través de este medio, haciendo uso de tres poderosas herramientas muy populares para el desarrollo de una aplicación web movil que son:

WURFL (Wireless Universal Resource File) :  Es una base de datos de dispositivos móviles que registra las especificaciones y capacidades de cada uno de ellos.

Tera-WURFL :  Es una libreria para PHP que utiliza MySQL y un mecanismo de cache para alcanzar excelente performance y reducir el tiempo que se toma para hacer consultas a una base de datos WURLF.

HAWHAW (HTML and WML Hybrid Adapted Webserver) :  Es una libreria para PHP hecho disponible gratuitamente a traves de un solo archivo hawhaw.inc. HAWHAW trabaja con Tera-WURLF para hacer uso de la base de datos WURFL y asi generar el WML(Wireless Markup language) que es usado para crear paginas que pueden ser mostrados en un browser WAP (browser de un movil).

Con todo esto y atraves de los servicios web, dokeos corporativo ofrece funcionalidades que pueden ser consultadas desde un celular

Aca les muestro un pequeño demo sobre una cosulta a los eventos de la agenda de un curso determinado desde un nokia 6670:

celu1

En esta primera imagen el usuario selecciona el curso, el mes y el año de los eventos de dicho curso

celu2

Se muestra un calendario resaltando los dias donde existen eventos para dicho mes y año, al seleccionar un dia resaltado, se muestra
la lista de eventos para ese dia.

Esto es sólo el comienzo, más adelante les mostraré más cosas de las funcionalidades que dokeos ofrece atraves de un móvil.


Servicios web con PHP utilizando la herramienta NuSoap

Marzo 16, 2009

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.

SOAPSimple 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>’;