Estás en:   ArielOrtiz.com > Desarrollo de aplicaciones distribuidas > Laboratorio 4: Servicios Web

Laboratorio 4: 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 Python es muy sencillo escribir un cliente que consuma un servicio Web usando los módulos urllib2 y xml.dom.minidom:

from urllib2 import urlopen
from xml.dom.minidom import parseString

url = urlopen('http://weather.yahooapis.com/forecastrss?w=112625&u=c')
documento = parseString(url.read())

La función urlopen utilizada arriba obtiene un recurso mediante el método GET del protocolo HTTP. La función parseString procesa la respuesta obtenida y crea el árbol de DOM correspondiente. Dicho árbol ahora 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 IMPORTANTE: Las actividades de la práctica se pueden elaborar de manera individual o en parejas. El reporte de la práctica de laboratorio debe ser desarrollado de manera individual.

Instrucciones preliminares

Antes de comenzar esta práctica, renombra tu directorio www utilizado en la práctica pasada y durante las clases. Desde la línea de comando teclea:

mv www www.backup3

Vuelve a crear otra vez el directorio www, y sus subdirectorios static y cgi-bin.

mkdir www

cd www

mkdir static

mkdir cgi-bin

Con esto estarás iniciando esta práctica con un sitio Web vacío, pero sin necesidad de modificar los archivos de configuración de Apache.

Problema

Escribe una pequeña aplicación Web compuesta de dos páginas. En la primera página debe aparecer un menú como el siguiente:

Weather Conditions

Select a city:

  • Atizapán de Zaragoza
  • Cuautitlán Izcalli
  • Naucalpan de Juárez
  • Tepotzotlán
  • Tlalnepantla de Baz

Utiliza el sitio WOEID Lookup para encontrar el WOEID de las ciudades de arriba. No uses acentos al momento de hacer las búsquedas.

Cuando el usuario haga clic en la liga que corresponde al nombre de alguna ciudad, debe aparecer una nueva página (generada por un script CGI escrito en Python) con toda su información actualizada tal como se muestra en el siguiente ejemplo:

City: Atizapán de Zaragoza
Country: Mexico
Latitude: 19.56
Longitude: -99.25


Weather Condition: Partly Cloudy
Temperature: 13° C
Sunrise: 7:07 am
Sunset: 6:32 pm
Humidity: 63%
Visibility: 8.05 Km

Forecast for: Wed, 8 Feb 2012

  • Partly Cloudy
  • low: 6° C
  • high: 17° C

Forecast for: Thu, 9 Feb 2012

  • Few Showers
  • low: 8° C
  • high: 18° C

Publication date: Wed, 08 Feb 2012 9:45 am CST

TIP: La imagen se puede generar usando el siguiente URL: http://l.yimg.com/a/i/us/we/52/cc.gif, en donde cc es el valor del atributo code del elemento <yweather:condition>.

Verifica que las dos páginas sean HTML5 válido utilizando el Servicio de Validación de W3C.

¿Qué se debe entregar?

Para entregar tu trabajo individual, sigue las siguientes instrucciones:

Fecha límite: Martes, Febrero 14.

Evaluación

Esta actividad será evaluada usando los siguientes criterios:

50% Implementación de los requerimientos.
50% Reporte de la práctica de laboratorio.
DA El programa y/o reporte es un plagio.