6 minutes reading time (1150 words)

Creando un módulo para consumir un Web Service

Creando un módulo para consumir un Web Service

Mencionar el tema de los Web Service seguramente emocionará a muchos desarrolladores, pero si lo que deseamos es consumir su resultado ¿cómo lo podemos hacer de una forma sencilla? ¿será que con la poca experiencia o conocimiento que tengo puedo aprovechar dicha información? La respuesta es Sí, veamos cómo lo podemos hacer.

Mencionar el tema de los Web Service seguramente emocionará a muchos desarrolladores, pero si lo que deseamos es consumir su resultado ¿cómo lo podemos hacer de una forma sencilla? ¿será que con la poca experiencia o conocimiento que tengo puedo aprovechar dicha información? La respuesta es Sí, veamos cómo lo podemos hacer.

Existe mucha documentación sobre las distintas tecnologías y el vocabulario involucrado, el cual por cierto no es nada nuevo (más de 10 años de historia, que en tecnología es un montón), por lo que en el presente me enfocaré en solo una de ellas, para demostrar lo sencillo que es utilizar esta tecnología.

Para el presente artículo, tomaré de ejemplo la siguiente circunstancia, “Deseo imprimir el Tipo de cambio del Quetzal (moneda nacional de Guatemala) respecto al Dólar“. Esta información la genera el Banco de Guatemala y la actualiza todos los días (http://www.banguat.gob.gt/cambio/ ).  No es descabellado pensar que algunas aplicaciones dependen de que un humano entre al portal del Banco y alimenten la información en su sistema.  Demos el primer paso para automatizar esto, mostremos la información actualizada en nuestro sitio.

 

 

Para mostrar la información en nuestro portal hagamos un pequeño módulo, para lo cual recurro a la documentación oficial del proyecto. https://docs.joomla.org/J3.x:Creating_a_simple_module/Developing_a_Basic_Module/es

El primer paso sería crear todos los archivos involucrados, algo tan sencillo como copiar y pegar el ejemplo que aparece en la documentación oficial. Para este ejemplo crearé un módulo que llamaré mod_TCbanguat
 

 
 

Siguiendo el orden de la documentación oficial

 

Archivo mod_TCbanguat.php, el cual realmente no hace mucho, más que invocar el helper del módulo y en particular a la función getTC, que es la que hará uso del Web Service

 

<?php

/**

* Tipo de Cambio - Banco de Guatemala

*

* @link http://www.adlcweb.com

* @license        GNU/GPL, see LICENSE.php

* mod_TCbanguat is free software.

* to the GNU General Public License, and as distributed it includes or

* is derivative of works licensed under the GNU General Public License or

* other free or open source software licenses.

 */

 

// No direct access

defined('_JEXEC') or die;

// Include the syndicate functions only once

require_once dirname(__FILE__) . '/helper.php';

 

$hello = modTCBanguatHelper::getTC($params);

require JModuleHelper::getLayoutPath('mod_TCbanguat');

 

?>

 

Archivo helper.php, incluye una única función pero se pueden agregar las que sean necesarias. Veamos con un poco de más detalle lo que fue necesario incluir aquí.

 

<?php

/**

* @link http://www.adlcweb.com

* @license        GNU/GPL, see LICENSE.php

* mod_TCbanguat is free software.

* to the GNU General Public License, and as distributed it includes or

* is derivative of works licensed under the GNU General Public License or

* other free or open source software licenses.

*/

 

class ModTCBanguatHelper

{

   /**

    *

    * @param   array  $params An object containing the module parameters

    *

    * @access public

    */    

   function getTC( $params )

   {

       $url = 'http://www.banguat.gob.gt/variables/ws/TipoCambio.asmx?WSDL';

       try {

$soap = new SoapClient($url);

$data = $soap->TipoCambioDia();

}

catch(Exception $e)

{

die($e->getMessage());

}

       return $data->TipoCambioDiaResult->CambioDolar->VarDolar->referencia;

   }    

}

 

Como primer paso, necesitamos conocer el WSDL del Web Service, ¿qué es eso? Simplemente un archivo similar a un XML donde se describe el Web Service (https://es.wikipedia.org/wiki/WSDL), básicamente podemos ver sus funciones, variables y cosas así, al principio parece complicado entenderlo, pero antes de llegar a eso, generalmente tenemos acceso a una forma mucho más entendible para nosotros (http://www.banguat.gob.gt/variables/ws/TipoCambio.asmx) donde podemos ver en claro español (o el idioma del desarrollador del Web Service), las funciones que tiene y al ingresa a cada una de ellas y sus caracteristicas propias. Dado que es ejemplo haré uso de la primera de estas, que devuelve el tipo del cambio del día de hoy.  

 

En el segmento try & catch, lo que estamos haciendo en de una forma segura (manejando excepciones http://php.net/manual/es/language.exceptions.php  ) creando el objeto SOAP, y de una vez almaceno el resultado de ejecutar la función que deseo en una variable $data.  La función que nos interesa se llama TipoCambioDia, ya que es lo que aparece en el SOAPAction  

 

 

Si comparamos dos de las funciones disponibles, podremos ver que la función seleccionada no maneja parámetros de entrada

 

 

 

Y la última línea del nuestro helper.php es el retorno del valor deseado de la variable obtenida.  ¿Cómo se llama la variable dónde está la información?, veamos la información que nos proporciona la función, en particular el siguiente fragmento

 



Fácilmente se puede observar, que tiene una estructura de etiquetas similar al XML o HTML, y que cada etiqueta es necesaria recorrerla para llegar al dato puntual que deseamos (en este caso, fecha o referencia)

 

Con la explicación anterior nuestro módulo ya tiene disponible la información solicitada, solo falta mostrarla, para lo cual recurrimos a la plantilla de nuestro módulo (archivo tmpl/default.php)

 

<?php

// No direct access

defined('_JEXEC') or die; ?>

<?php echo $hello; ?>

 

¿Quién es hello?, la variable del archivo mod_TCbanguat, que invocó al helper, por lo tanto tiene el resultado del return que acabamos de revisar. En este momento es un archivo sin gracia, sin ningún detalle, pero ya con la información que podemos controlar y mostrar de la forma deseada. Se pueden agregar cualquier texto antes o después de la variable, incluso podemos pensar en agregar más variables, por ejemplo la fecha que se puede obtener del mismo Web Service ó pensar en dejar listo nuestro pequeño módulo para aceptar Override (haciendo uso html para darle formato) ó traducciones, pero son detalles que escapan del objetivo de mostrar el consumir un dato de un Web Service de forma sencilla.  

 

Y para casi terminar nos tocaría crear el XML, para que el instalador de Joomla lo reconozca y podamos publicar nuestro módulo.

 

<?xml version="1.0" encoding="utf-8"?>

<extension type="module" version="3.1.0" client="site" method="upgrade">

   <name>Tipo de Cambio Diario del Banguat</name>

   <author>Leonel Canton</author>

   <version>2.0.0</version>

   <creationDate>Noviembre 2016</creationDate>

   <description>Consume el webservices del Banco de Guatemala, y muestra el tipo de cambio del dia. http://www.banguat.gob.gt/variables/ws/TipoCambio.asmx?WSDL ahora usando la libreria de SOAP propia de php. Probado con Joomla! 3.6.4</description>    <files>

       <filename>mod_TCbanguat.xml</filename>

       <filename module="mod_TCBanguat">mod_TCbanguat.php</filename>

       <filename>index.html</filename>

       <filename>helper.php</filename>

       <filename>tmpl/default.php</filename>

       <filename>tmpl/index.html</filename>

   </files>

   <config>

   </config>

</extension>

 

Luego de tener todos los archivos listos y ajustados al Web Service deseado, tenemos que ir a nuestro administrador de Joomla!, en el menú de extensiones usar la opción de descubrir, seleccionamos nuestra extensión y presionamos el botón de instalar.

 

Y para terminar, nos falta crear el módulo desde el administrador y publicarlo en la posición deseada.

 

Como resultado final se puede ver el mismo tipo de cambio que muestra el Banco en nuestra Web

 

 

Referencias

http://www.service-architecture.com/articles/web-services/web_services_explained.html

http://www.w3schools.com/xml/xml_services.asp

https://www.w3.org/2002/ws/

https://es.wikipedia.org/wiki/Servicio_web

http://php.net/manual/es/refs.webservice.php

https://volunteers.joomla.org/teams/web-services-working-group

 

Ejemplos

http://www.banguat.gob.gt/variables/ws/TipoCambio.asmx

http://www.webservicex.net/globalweather.asmx

http://www.w3schools.com/xml/tempconvert.asmx

 

 

0
JWC 2016, three days to remember
La importancia de prevenir, no solo corregir
 

Comments

Already Registered? Login Here
No comments made yet. Be the first to submit a comment

By accepting you will be accessing a service provided by a third-party external to https://magazine.joomla.org/