Cargando



Hacer cliente para servicios web en Java

En este tutorial veremos cómo hacer algunos clientes de servicios web utilizando Java, donde adicionalmente veremos algunos temas relacionados a las interacciones con las redes de forma general.


ene 30 2015 02:03
Profesional
jul 06 2016 18:16

Los nuevos formatos de transferencia de información nos están obligando a cambiar la forma en la cual pensamos nuestras aplicaciones, cada día más dependemos del Internet y con ello también la transmisión de datos entre lugares distantes y tecnologías diferentes.

 

Integrar diferentes tecnologías siempre fue un reto en el pasado, pero con los nuevos estándares y la fuerza que ha ido tomando el protocolo HTTP ahora es mucho más sencillo, ya que no dependemos de aplicaciones integradoras si no que cada aplicación tiene una interfaz web para dictar sus datos.

 

En Java muchas veces necesitaremos acceder a información que otras aplicaciones tienen o generan y por ello no podemos descuidar el aspecto del conocimiento de cómo hacer conexiones desde una aplicación Java a la red. Pero no solo a redes, también debemos conocer cómo hacer clientes de servicios web así sea de forma básica ya que con ello nos aseguraremos de no quedarnos aislados en nuestro entorno.

 

¿Qué son servicios web?
Los servicios web son aplicaciones que se encuentran en servidores que tienen acceso a una red, estos pueden estar en cualquier lenguaje o tecnología, sin embargo toda la comunicación con el “mundo exterior” la gestionan a través de HTTP y sus métodos, GET, POST, PUT, DELETE, etc.

 

Conexiones
Lo interesante de este tipo de aplicaciones es la posibilidad de hacer conexiones entre tecnologías totalmente diferentes, por ejemplo podemos tener un servicio web escrito en Python que nos lleve el inventario de una fábrica y luego en nuestra aplicación en Java nos conectamos al mismo para saber las cantidades de un producto.

 

Tal facilidad es lo que ha catapultado su rápida adopción en los últimos años y ha generado que ya sea algo estándar ofrecer dichas herramientas cuando hablamos de sistemas y aplicaciones empresariales. Inclusive aplicaciones personales como blogs o foros están ofreciendo servicios web para facilitar de la generación de aplicaciones móviles y que todo quede en un mismo ecosistema.

 

Ya habiendo visto un poco de que va el tema de los servicios web veamos cómo están los mismos clasificados.

 

Servicios REST


Este tipo de servicios permiten la transmisión de datos a través de HTTP, únicamente utilizando los métodos de este protocolo, generalmente la comunicación solo requiere el envío de datos ya sea a través de formularios o de JSON, inclusive algunos reciben hasta XML.

 

Es el más popular del momento ya que la construcción de clientes para su consumo es muy sencilla y no requiere hacer muchas preparaciones adicionales. Simplemente con que nuestro cliente pueda lanzar una petición GET a una URL del servicio podremos empezar a utilizarlo o consumirlo como también se le conoce a la acción de obtener datos.

 

Servicios SOAP


El servicio SOAP es mucho más antiguo que REST, y hasta hace algunos años era la forma estándar de realización de aplicaciones de servicios web, su construcción requiere seguir algunos protocolos en particular y se necesita generar un archivo XML llamado WSDL, que es donde se definen los métodos a los cuales puede acceder el cliente.

 

Debido a la alta complejidad de la elaboración de los clientes para consumir este tipo de servicio, su popularidad ha ido bajando por lo que la mayoría de las nuevas tecnologías no lo están tomando en cuenta. Sin embargo hay aún muchos servicios que existen en el mundo tecnológico que se manejan bajo esta modalidad, por lo que aunque esté cayendo en desuso, aún hay que saber utilizarlo.

 

La complejidad de este tipo de servicios radica en la preparación de los diferentes XML, y seguir al pie de la letra los estándares según las plataformas, este tipo de razones es lo que lo hace engorroso y por ello los desarrolladores han ido migrando a REST.

 

Crear un programa que se conecte mediante TCP


Ya que hemos leído y revisado un poco más a fondo de lo que representa la parte teórica de lo que son servicios web, vamos a empezar la parte práctica de este tutorial haciendo un ejercicio muy básico pero que nos ayudará a entender el flujo de las cosas.

 

Vamos a realizar una simple conexión desde nuestra aplicación a través de la red mediante TCP con un equipo que se encuentre accesible y disponible en ella, para ello vamos a necesitar saber su dirección IP y un puerto que esté disponible y fuera de las restricciones de los diferentes firewalls.

 

Requisitos
En primer lugar vamos a requerir del paquete java.net.Socket que nos da una serie de herramientas que nos van a facilitar la vida estableciendo las conexiones, evidentemente el ejemplo que mostramos es muy básico pero nos da las bases para poder crear cosas más allá dependiendo de nuestros requerimientos.

 

Vamos a crear un programa que intente conectarse a una máquina por un puerto determinado, sin embargo este programa también va evaluar si ha ocurrido un error o alguna complicación durante el proceso de conexión, con ello podremos actuar de forma diligente y no esperar una falla fatal, veamos el código para este ejemplo:

import java.net.Socket;import java.net.UnknownHostException;import java.net.NoRouteToHostException;import java.net.ConnectException;public class ConexionTest { public static void main(String[] argv) { String servidor = argv.length == 1 ? argv[0] : "localhost"; int puerto = 80; try (Socket sock = new Socket(servidor, puerto)) { System.out.println(" -- Conexion existosa a: " + servidor + "--"); } catch (UnknownHostException e) { System.err.println(servidor + " Servidor desconocido"); return; } catch (NoRouteToHostException e) { System.err.println(servidor + " Fuera del alcance" ); return; } catch (ConnectException e) { System.err.println(servidor + " Conexion rechazada"); return; } catch (java.io.IOException e) { System.err.println(servidor + ' ' + e.getMessage()); return; } }}
Empezamos importando el paquete java.net.Socket con ello tendremos la clase Socket que es la que utilizaremos luego para establecer la conexión, si no le pasamos un argumento a la hora de ejecutar el programa este se conectará directamente con nuestro equipo, indicamos en este caso el puerto 80, pero puede ser otro.

 

Colocamos la creación de la instancia Socket en un bloque try – catch esto nos permite evaluar las excepciones si la conexión no es lograda en lugar de terminar el programa de forma abrupta. Finalmente tenemos diferentes bloques catch cada uno con una excepción diferente para darnos una idea de que fue lo que falló.

 

Para que las excepciones funcionen vimos que al inicio importamos el paquete java.net el cual vamos a utilizar en este ejemplo, ahora veamos cómo nos queda todo esto al ejecutar nuestro programa. Al ejecutar nuestro programa veamos en la siguiente imagen como pudimos acceder exitosamente a nuestro router Wi-Fi y a nuestro localhost:

 


servicios-web-java.jpg

 

Cliente para un servicio REST


En este ejemplo vamos a crear un pequeño cliente de servicio web que va a conectarse a un servidor REST, para ello necesitamos únicamente un servidor que nos pueda dar una respuesta al método GET de HTTP, es por ello que podemos utilizar freegeoip.net el cual según lo que le pasemos por la URL nos puede devolver un JSON con datos de alguna página web que deseemos.

 

Veamos el código que hemos realizado:

import java.net.URL;import java.net.URLConnection;import java.io.BufferedReader;import java.io.InputStreamReader;public class ClienteRest { public static void main(String[] args) throws Exception { URLConnection conn = new URL("http://freegeoip.net/json/www.espnf1.com").openConnection(); try (BufferedReader is = new BufferedReader(new InputStreamReader(conn.getInputStream()))) { String line; while ((line = is.readLine()) != null) { System.out.println(line); } } }}
Lo primero que hacemos es importar las clases URL y URLConnection, estás nos permiten en primer lugar convertir un String a una URL que pueda ser interpretada por Java y en segundo lugar hacer la conexión adecuada. Luego importamos dos librerías de clases que nos permiten manipular los datos que vamos a recibir como respuesta del servicio web.

 

Finalmente, hacemos nuestra conexión al servicio web de freegeoip.net, en este caso le pasamos una página cualquiera que sabemos que existe, de esta forma podremos obtener algún resultado, luego la respuesta la almacenamos en un buffer para después leerla y pasarla a un objeto String, finalmente hacemos la impresión del contenido y obtendremos algo como lo que vemos en la siguiente imagen:

 


 

Por supuesto este es un enfoque simple para poder entender cómo funcionan los servicios web, ya que no abarca el envío de parámetros desde nuestro cliente, pero para ello se pueden documentar sobre Apache HttpClient, que les puede dar herramientas superiores en cuanto al consumo de este tipo de servicios Web, lo cual dejamos como tarea.

 

Con esto hemos finalizado este tutorial, hemos construido un par de programas que nos ayudan a ponernos en camino para poder dominar los servicios web, con ello ya vemos como nuestra mente seguramente empezará a imaginar los mejores usos de estas herramientas en nuestras aplicaciones y así hacer cosas mucho más grandes.


¿Te ayudó este Tutorial?


Sin comentarios, sé el primero!

No esperes más y entra en Solvetic
Deja tus comentarios y aprovecha las ventajas de la cuenta de usuario ¡Únete!

X