May 12

soapui-logoActualmente cuando se desarrollan servicios web es posible probarlos gracias a que los ambientes de desarrollo crean paginas asociadas con cada uno de los metodos del webservice que permiten hacer las invocacion de los servicios directamente para comprobar su funcionamiento, esto sucede con plataformas como Visual Studio y NetBeans, pero no existen por ejemplo para servicios web creados con PHP que soporten WSDL. Estas paginas de prueba tampoco estan disponibles en los servicios web cuando estan en produccion lo que no permiten identificar y probar de manera rapida la funcionalidad de los webservices.

soapUI de eviware es una herramienta que permite rapidamente a traves de una interface grafica, obtener informacion de los webservices, realizar llamados generando las peticiones para cada metodo del webservice y visualizando las respuestas enviadas por el servidor, permitiendo rapidamente identificar las operaciones asociadas con el webservice y permitiendo hacer pruebas rapidamente del funcionamiento de los webservices sin necesidad de recurrir a escribir codigo para crear clientes que consuman los webservices.

soapUI es una de las herramientas que todo desarrollador web debe tener en su arsenal y esta disponible en una version gratuita que puede ser descargada o ejecutada desde el sitio utilizando Java Web Start, para lo cual necesitamos instalar el JRE de Java o tambien una version Pro con caracteristicas avanzadas para aquellos desarrolladores que necesitan herramientas mas potentes. soapUI incluye en sus versiones actuales soporte para servicios web REST, pruebas funcionales y simulacion de webservices.

Para ilustrar su uso, lo utilizaremos para consumir el webservice de Calculadora creado en Java del cual se hablo en una entrada anterior del blog : Publicar Web Service en Java sin Servidor Web

soapui_calculadora

Requisitos :

  • Tener instalado Java

Pasos :

  • Ir a la pagina oficial de soapUI
    http://www.soapui.org
  • Buscar el boton WebStart Now ! o ir al siguiente enlace para ejecutar la version 2.5.1 :
    http://www.soapui.org/jnlp/2.5.1/soapui.jnlp
  • Esto ejecuta el Java Web Start encargado de instalar la aplicacion en el computador
  • Puede tardar algunos minutos, deacuerdo a la velocidad de acceso a Internet
  • Ir al menu File y seleccionar la opcion New soapUI Project
  • Suministrar la siguiente informacion :
    Project Name : Calculadora
    Initial WSDL/WADL : http://localhost:4444/CalculadoraService?wsdl
  • Habilitar la opcion :
    Create sample request for all operations
  • Pulsar el boton Ok
  • En el navegador ir al item sumar y doble click
  • Click en Request1
  • Suministrar los valores de los argumentos a enviar a la suma
  • Pulsar boton verde en la ventana del request para ejecutar el llamado
  • La respuesta se visualiza en la otra parte de la ventana con el resultado de la suma

Enlaces :

Tagged with:



En May 12 de 2009, Marlon J. Manrique escribió acerca de soapUI : Herramienta para pruebas de WebServices.
May 09

resin_logoEs posible ejecutar un servicio creado en PHP con NuSOAP en el servidor de aplicaciones escrito en Java Resin, esto permite crear webservices que pueden ser alojados en servidores como Apache2 con soporte para PHP, como tambien servidores Java como el GlassFish.

Para que los webservices funcionen es necesario instalar una version igual o superior a la 3.2.1 la cual instalamos en el anterior post (enlace), como tambien realizar un pequeño cambio en el sel codigo (enlace) Servidor donde se reemplaza la lectura de datos via RAW por una lectura de la entrada de datos php://input, quedando de la siguiente forma el archivo servicio.php

 
<?php
	require_once('nusoap.php');
	require_once('sumar.php');
 
	$server = new nusoap_server();
	$server->register('sumar');
 
	$HTTP_RAW_POST_DATA = file_get_contents("php://input");
	$server->service($HTTP_RAW_POST_DATA);
?>
 

De esta forma es posible ejecutar el servicio web encualquier plataforma o servidor que soporte Java.

Enlaces :

UA:A [1.3.0_631]
Tagged with:



En May 9 de 2009, Marlon J. Manrique escribió acerca de WebService con NuSOAP en Servidor Resin.
May 09

phpAunque en PHP5 existe una extension para crear servicios web basados en SOAP, algunos servidores donde posiblemente alojemos nuestra aplicacion no tienen habilitada la extension y por tal motivo debemos buscar alternativas para la creacion de los webservices.

En el 2002 Dietrich Ayala escribio una libreria llamada NuSOAP que permite implementar webservices en PHP incluyendo la version 4 y 5, esta libreria es una de las mas populares en la costruccion de servicios web en PHP pues tiene soporte para diferentes versiones de SOAP, como tambien es posible crear servicios web que generen los descriptores de los webservices (WSDL) y soporte de tipos de datos, aunque la implementacion suele complicarse cuando se utilizan estas caracteristicas.

Implementaremos un webservice basado en una funcion llamada sumar de la cual crearemos el webservice y su cliente utilizando NuSOAP, a continuacion se describen los pasos :

  • Abrir una terminal
  • Ir al directorio web donde se creara el servicio
  • Descargar la libreria NuSOAP del repositorio en SourceForge
    http://nusoap.cvs.sourceforge.net/viewvc/nusoap/lib/
  • En este caso descargaremos la version 1.121
    wget http://nusoap.cvs.sourceforge.net/viewvc/*checkout*/nusoap/lib/nusoap.php?revision=1.121

Implementar la Funcion a Utilizar :

  • Utilizando su editor favorito crear un archivo donde se implemente la funcion :
    (utilizaremos una funcion sumar que recibe dos numero y retorna su suma)
  • Crear el archivo sumar.php
 
<?php
        function sumar($x, $y)
        {
                return $x + $y;
        }
?>
 

Implementar el Servicio Web :

  • Utilizando su editor favorito crear un archivo donde se cree el servidor
  • Crear el archivo servicio.php
  • Este incluye la libreria NuSOAP y la funcion creada anteriormente
  • Crea un servidor soap e incluye la funcion
  • Despacha el servicio con la informacion suministrada
 
<?php
        require_once('nusoap.php');
        require_once('sumar.php');
 
        $server = new nusoap_server();
        $server->register('sumar');
 
        $HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '';
        $server->service($HTTP_RAW_POST_DATA);
?>
 
  • Abrir la pagina PHP en su navegador favorito, debe salir en blanco sin reportar errores
    http://<servidor>/<ruta>/servicio.php

Implementar el Cliente :

  • En este caso implementaremos un cliente en el lenguaje PHP para consumir el servicio.
  • Utilizando su editor favorito crear un archivo cliente.php
  • Para realizar el llamado se debe especificar como argumentos el nombre de la fuinciony en un arreglo asociativo, los nombres de las variables con sus respectivos valores
 
<?php
        require_once('nusoap.php');
        $cliente = new nusoap_client('http://<ipServidor>/<ruta>/servicio.php');
        $resultado = $cliente->call('sumar', array('x' => '3', 'y' => 4));
        print_r($resultado);
?>
 
  • Abrir la pagina PHP del cliente en su navegador favorito, debe salir en blanco sin reportar errores
    http://<servidor>/<ruta>/cliente.php

Enlaces :

Tagged with:



En May 9 de 2009, Marlon J. Manrique escribió acerca de WebService en PHP con NuSOAP.
May 08

phpEn la version 5 de PHP se incorporan las clases necesarias para la creacion de webservices y su invocacion desde clientes remotos, a continuacion se ilustra como crear un webservice en PHP que ejecute un metodo dentro de una clase definida por el usuario en el servidor.

Implementar la Clase a Utilizar :

  • Ir al directorio web donde se quiere crear el servicio
  • Utilizando su editor favorito crear un archivo donde se implemente la clase y sus metodos :
    (utilizaremos una clase Calculadora con el metodo sumar que recibe dos numero y retorna su suma)
  • Crear el archivo Calculadora.php
 
<?php
        // Clase que implementa los servicios
        class Calculadora
        {
                // Metodo a utilizar como servicio
                public function sumar($x, $y)
                {
                        return $x + $y;
                }
        }
?>
 

Implementar el Servicio Web :

  • Utilizando su editor favorito crear un archivo donde se cree el servidor
  • Crear el archivo servicio.php
  • Incluir la clase Calculadora a utilizar dentro del webservice
  • No se utilizara WSDL ya que toca generarlo a mano para el servicio
  • Al no utilizar WSDL se debe suministrar el namespace, en este caso uri:webservices
  • Al momento de asignar la clase al webservice se debe suministrar el nombre.
 
<?php
        // Incluir la Clase
        require_once('Calculadora.php');
 
        // Crear servidor de Soap
        $server = new SoapServer(
                null, // No utilizar WSDL
                array('uri' => 'urn:webservices') // Se debe especificar el URI
        );
 
        // Asignar la Clase
        $server->setClass('Calculadora');
 
        // Atender los llamados al webservice
        $server->handle();
?>
 
  • Abrir la pagina PHP en su navegador favorito, debe salir en blanco sin reportar errores
    http://<servidor>/<ruta>/servicio.php

Implementar el Cliente :

  • En este caso implementaremos un cliente en el lenguaje PHP para consumir el servicio.
  • Utilizando su editor favorito crear un archivo cliente.php
 
<?php
        // Crear el cliente suministrado la ruta del servicio
        // Utilizar el uri
        $client = new SoapClient(null,
                array(
                        'location' => 'http://localhost/~marlonj/servicio.php',
                        'uri' => 'urn:webservices',
                ));
 
        // Llamar el metodo como si fuera del cliente
        echo $client->sumar(3,4);
?>
 
  • Abrir la pagina PHP del cliente en su navegador favorito, debe salir en blanco sin reportar errores
    http://<servidor>/<ruta>/cliente.php

De esta forma podemos crear una clase que contenga los metodos a ser utilizados como webservices, de esta forma el servidor crea una instancia de la clase Calculadora cada vez que se invoca un servicio.

Tambien es posible asignar un objeto al servicio para esto podemos crear una instancia del objeto a utilizar como servicio web y enlazarlo con el webservice, asi :

 
<?php
        // Incluir la Clase
        require_once('Calculadora.php');
 
        // Crear servidor de Soap
        $server = new SoapServer(
                null, // No utilizar WSDL
                array('uri' => 'urn:webservices') // Se debe especificar el URI
        );
 
        // Crear el objeto a utilizar como webservice
        $calculadora = new Calculadora();
 
        // Asignar el Objeto
        $server->setObject($calculadora);
 
        // Atender los llamados al webservice
        $server->handle();
?>
 

Enlaces :

Tagged with:



En May 8 de 2009, Marlon J. Manrique escribió acerca de Creando WebService en PHP5 con una Clase.
May 07

phpUna de las tantas formas de crear aplicaciones orientadas a servicios es el uso de los webservices que permiten realizar llamados a funciones que se encuentrar en un servidor desde otras maquinas de forma remota, permitiendo un desarrollo independiente de la plataforma, utilizando tecnologias abiertas.

La version 4 de PHP no incluye soporte directo para la implementacion de webservices, por tal motivo eran necesarias librerias con NuSOAP que implementaban los diferentes componentes para la creacion de webservices a si como su consumo, aun hoy se sigue utilizando esta libreria gracias a que soporta la generacion del descriptor del webservice de forma automatica.

En la version 5 de PHP se incorporan las clases necesarias para la creacion de webservices y su invocacion desde clientes remotos, a continuacion se ilustra como crear un webservice en PHP que ejecute una funcion definida por el usuario en el servidor.

Implementar la Funcion a Utilizar :

  • Ir al directorio web donde se quiere crear el servicio
  • Utilizando su editor favorito crear un archivo donde se implemente la funcion :
    (utilizaremos una funcion suma que recibe dos numero y retorna su suma)
  • Crear el archivo sumar.php
 
<php
        function sumar($x, $y)
        {
                return $x + $y;
        }
>

Implementar el Servicio Web :

  • Utilizando su editor favorito crear un archivo donde se cree el servidor
  • Crear el archivo servicio.php
  • Incluir la funcion suma a utilizar dentro del webservice
  • No se utilizara WSDL ya que toca generarlo a mano para el servicio
  • Al no utilizar WSDL se debe suministrar el namespace, en este caso uri:webservices
  • Al momento de adicionar las funciones al webservice se puede especificar el nombre de la funcion, un arreglo con los nombres de las funciones a adicionar al servicio.
 
<php
        // Incluir la funcion
        require_once('sumar.php');
 
        // Crear servidor de Soap
        $server = new SoapServer(
                null, // No utilizar WSDL
                array('uri' => 'urn:webservices') // Se debe especificar el URI
        );
 
        // Adicionar las funciones
        $server->addFunction(
                array('sumar')
        );
 
        // Atender los llamados al webservice
        $server->handle();
?>
  • Abrir la pagina PHP en su navegador favorito, debe salir en blanco sin reportar errores
    http://<servidor>/<ruta>/servicio.php

Implementar el Cliente :

  • En este caso implementaremos un cliente en el lenguaje PHP para consumir el servicio.
  • Utilizando su editor favorito crear un archivo cliente.php
 
<php
        // Crear el cliente suministrado la ruta del servicio
        // Utilizar el uri
        $client = new SoapClient(null,
                array(
                        'location' =>; 'http://<servidor>/<ruta>/servicio.php',
                        'uri' =>; 'urn:webservices',
                ));
 
        // Llamar la funcion como si fuenra un metodo del cliente
        echo $client->sumar(3,4);
?>
  • Abrir la pagina PHP del cliente en su navegador favorito, debe salir en blanco sin reportar errores
    http://<servidor>/<ruta>/cliente.php

Con esto ya tenemos un servicio web en PHP que puede ser llamado remotamente desde otro servidor que implemente el cliente o cualquier otro lenguaje que permita implementar clientes de webservices.

Enlaces :

Tagged with:



En May 7 de 2009, Marlon J. Manrique escribió acerca de Creando WebService en PHP5 desde una Funcion.