Estás en:   ArielOrtiz.info > Desarrollo de aplicaciones web > Práctica 5: Servicios Web

Práctica 5: Servicios Web

Objetivos

Durante esta práctica, los alumnos serán capaces de:

Esta actividad promueve las siguientes habilidades, valores y actitudes: análisis y síntesis, capacidad de resolver problemas, creatividad, y uso eficiente de la informática y las telecomunicaciones.

Introducción

Un servicio web es un método de comunicación entre dos dispositivos a través de la web.

Según la W3C, los servicios Web son[1]:

... un conjunto de aplicaciones o de tecnologías con capacidad para interoperar en la Web. Estas aplicaciones o tecnologías intercambian datos entre sí con el objetivo de ofrecer unos servicios. Los proveedores ofrecen sus servicios como procedimientos remotos y los usuarios solicitan un servicio llamando a estos procedimientos a través de la Web.

Estos servicios proporcionan mecanismos de comunicación estándares entre diferentes aplicaciones, que interactúan entre sí para presentar información dinámica al usuario.

[1] Guía Breve de Servicios Web

En esta práctica utilizaremos un estilo arquitectónico conocido como REST (Representational State Transfer) para escribir un cliente de un servicio Web. REST define un modelo conceptual que permite efectuar llamadas a un servicio mediante el uso de los métodos de HTTP (GET, PUT, POST y DELETE) según corresponda semánticamente. Para los fines de esta práctica solo usaremos el método GET.

El servicio Web que utilizaremos es el Yahoo! Weather RSS Feed. La documentación correspondiente detalla la manera de utilizarlo. De manera resumida, se utiliza un URL como el siguiente para obtener la información del clima de una cierta localidad:

http://weather.yahooapis.com/forecastrss?w=localidad&u=c

El parámetro w debe ser un identificador WOEID (Where on Earth IDentifier) del sitio del que se desea conocer su información climatológica. Por ejemplo, el WOEID de Atizapán de Zaragoza es 112625. El parámetro u indica que las unidades de temperatura del resultado deben estar en grados Celsius.

Usando curl desde la línea de comando se puede ver el funcionamiento general de este servicio Web:

curl "http://weather.yahooapis.com/forecastrss?w=112625&u=c"

El resultado es un documento XML que cumple con la especificación RSS 2.0. La estructura de este documento se describe completamente en la documentación provista por Yahoo!.

Usando Node se puede escribir un cliente que consuma un servicio Web usando los módulos request y xml2js.

El módulo xml2js ya se debe tener instalado de la práctica de XML, por lo que solo hace falta instalar el módulo request. Desde la terminal teclear:

sudo npm install request

El siguiente script demuestra como se integra todo:

'use strict';

var request = require('request');
var xml2js = require('xml2js');
var util = require('util');

var parser = new xml2js.Parser();

request('http://weather.yahooapis.com/forecastrss?w=112625&u=c',
  function (err, res, data) {
    if (err) {
      console.log(err);
    } else if (res.statusCode != 200) {
      console.log('Status code ' + res.statusCode);
    } else {
      parser.parseString(data, function (err, result) {
        if (err) {
          console.log(err);
        } else {
          console.log(util.inspect(result, false, null));
          console.log('Done');
        }
      });
    }
  });

El objeto contenido en result puede ser manipulado usando las mismas técnicas que se usaron en la práctica del Laboratorio de XML.

Descripción de la actividad

NOTA: Esta práctica se puede elaborar de manera individual o en parejas.

Tu archivo fuente de JavaScript debe comenzar con un comentario que contenga el título de la práctica, la fecha y los datos personales de los autores (nombre y matrícula). Por ejemplo:

/*----------------------------------------------------------
 * Práctica 5: Servicios Web
 * Fecha: 11-Mar-2015
 * Autores:
 *           A01166611 Pepper Pots
 *           A01160611 Anthony Stark
 *----------------------------------------------------------*/

Crea un directorio llamado practica5. Escribe un script de Node, llamado clima.js, y colócalo en el directorio recién creado. Dicho script debe recibir de la línea de comando un número de identificador WOEID y desplegar en la salida estándar la información actualizada correspondiente tal como se muestra a continuación.

Por ejemplo, si el usuario teclea en la terminal lo siguiente:

node clima 112625

La salida esperada debe ser parecida a lo siguiente (en este ejemplo el programa se corrió por la tarde del 25 de septiembre del 2014):

WOEID: 112625
City: Atizapan de Zaragoza
Country: Mexico
Latitude: 19.57
Longitude: -99.26
Weather Condition: Smoke
Temperature: 19° C
Sunrise: 7:24 am
Sunset: 7:30 pm
Humidity: 56%
Visibility: 2 km
Forecast for: Thu, 25 Sep 2014
    Partly Cloudy
    low: 12° C
    high: 22° C
Forecast for: Fri, 26 Sep 2014
    PM Thunderstorms
    low: 13° C
    high: 23° C
Forecast for: Sat, 27 Sep 2014
    PM Thunderstorms
    low: 12° C
    high: 23° C
Forecast for: Sun, 28 Sep 2014
    PM Thunderstorms
    low: 12° C
    high: 24° C
Forecast for: Mon, 29 Sep 2014
    PM Thunderstorms
    low: 14° C
    high: 23° C    
Publication date: Thu, 25 Sep 2014 12:59 pm CDT

Nota 1: Se debe imprimir un mensaje de error si no se proporciona el WOEID desde la línea de comando o si éste no es válido.

Nota 2: El arreglo process.argv se puede utilizar desde un script de Node para obtener los argumentos de la línea de comando.

Nota 3: Utiliza el sitio WOEID Lookup para encontrar el WOEID de cualquier ciudad de tu interés.

¿Qué se debe entregar?

Crea un archivo tarball con todo el contenido del directorio practica5. Nombra a este archivo practica5.tgz. Este archivo se puede crear desde la línea de comando tecleando lo siguiente (asegúrate que te encuentres en el mismo nivel que el directorio practica5):

tar czf practica5.tgz practica5

✔ Instrucciones para subir archivo

Para entregar el archivo practica5.tgz, ingresa los siguientes datos:

Solicitar NIP

Fecha límite: Miércoles, 11 de marzo.

Evaluación

Esta actividad será evaluada usando los siguientes criterios:

100 La actividad cumple con todos los requerimientos.
-10 No se incluyó en comentario los datos de los autores.
10 El programa fuente tiene errores sintácticos.
50-90 El programa tiene algunos errores a tiempo de ejecución.
DA El programa es un plagio.