- Servicios web basados en REST

 

En primer lugar conviene destacar que el término REST se refiere a una arquitectura en lugar de a un protocolo en concreto, como es el caso de SOAP. A diferencia de SOAP, no vamos a añadir una capa adicional a la pila de protocolos, sino que utilizaremos directamente el protocolo HTTP. Siendo estrictos, la arquitectura REST no impone el uso de HTTP; no obstante, en la práctica se entiende que un servicio web basado en REST es aquel que se implementa directamente sobre la web.

Este planteamiento supone seguir los principios de la aplicación WWW, pero en lugar de solicitar páginas web solicitaremos servicios web. Los principios básicos de la aplicación WWW y, por tanto, los de REST son:

  • Transporte de datos mediante HTTP, utilizando las operaciones de este protocolo, que son GET, POST, PUT y DELETE.
  •  Los diferentes servicios son invocados mediante el espacio de URI unificado. Como ya se ha tratado en este libro, una URI identifica un recurso en Internet. Este sistema ha demostrado ser flexible, sencillo y potente al mismo tiempo. Se cree que fue uno de los principales factores que motivó el éxito de WWW.
  •  La codificación de datos es identificada mediante tipos MIME (text/html, image/gif, etc.), aunque el tipo de codificación preferido es XML (text/xml).

Ejercicio paso a paso: Comparativa entre una interacción SOAP y REST.

La empresa WebserviceX.NET ofrece un servicio web, GetIPService, que nos permite conocer, a partir de una dirección IP, el país al que pertenece. Este servicio puede ser utilizado tanto con REST como con SOAP, lo cual nos va a permitir comparar ambos mecanismos. Más todavía, dentro de REST tenemos dos opciones para mandar datos al servidor: el método GET y el método POST. El servicio que vamos a probar nos permite las dos variantes, lo que nos permitirá comparar ambos mecanismos.

 

1.     Abre un navegador web y accede a la URL:

http://www.webservicex.net/geoipservice.asmx/GetGeoIP?IPAddress=158.42.38.1

2.     Verifica que el resultado es similar al siguiente:

<?xml version="1.0" encoding="utf-8"?>
<GeoIP xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:xsd="http://www.w3.org/2001/XMLSchema"
       xmlns="http://www.webservicex.net/">
   <ReturnCode>1</ReturnCode>
   <IP>158.42.38.1</IP>
   <ReturnCodeDetails>Success</ReturnCodeDetails>
   <CountryName>European Union</CountryName>
   <CountryCode>EU</CountryCode>
</GeoIP>

 

3.     Prueba otras IP al azar y verifica a que países pertenecen.

4.     Vamos a emular el protocolo HTTP de forma similar a como lo hemos hecho en secciones anteriores. Desde un intérprete de comandos (símbolo del sistema/shell) escribe:

 telnet www.webservicex.net 80

5.     Cuando se establezca la conexión teclea exactamente el siguiente código seguido de un salto de línea adicional:

 GET /geoipservice.asmx/GetGeoIP?IPAddress=158.42.38.1 HTTP/1.1

       Host: www.webservicex.net

NOTA: También puedes cortar el texto y pegarlo. Para pegar sobre la ventana de símbolo de sistema de Windows has de pulsar con el botón derecho del ratón y seleccionar Pegar.

6.     El resultado ha de parecerse al anterior aunque al principio el servidor enviará sus cabeceras:

HTTP/1.1 200 OK

Cache-Control: private, max-age=0

Content-Length: 374

Content-Type: text/xml; charset=utf-8

Server: Microsoft-IIS/7.0

X-AspNet-Version: 4.0.30319

X-Powered-By: ASP.NET

Date: Mon, 30 Jan 2012 19:28:55 GMT

 

7.     Como acabamos de ver, el protocolo HTTP permite enviar información al servidor utilizando el método GET e introduciendo un carácter “?” al final de la URL seguido de los parámetros. El protocolo HTTP también permite mandar información con el método POST. El servicio web que estamos utilizando nos permite las dos alternativas. Veamos en qué consiste el método POST. Escribe en el intérprete de comandos:

telnet www.webservicex.net 80

8.     Cuando se establezca la conexión pega los siguientes caracteres:

POST /geoipservice.asmx/GetGeoIP HTTP/1.1

Host: www.webservicex.net

Content-Type: application/x-www-form-urlencoded

Content-Length: 21

 

IPAddress=158.42.38.1

Como puedes observar la información enviada es la misma, aunque ahora en lugar de adjuntarla a la URL se manda tras las cabeceras separada por una línea en blanco.

NOTA: La cabecera Content-Length: es obligatoria. Indica el número de caracteres enviados. En caso de que cambiara la longitud de la dirección IP tendrías que ajustarlo.

9.     El servidor está esperando nuevos comandos. Pulsa <Ctrl-C> para cerrarla conexión.

10.     Ahora vamos a usar el mismo servicio aunque mediante el protocolo SOAP 1.1 (NOTA:también es posible utilizar SOAP 1.2). Escribe en el interprete de comandos:

telnet www.webservicex.net 80

11.  Cuando se establezca la conexión pega los siguientes caracteres:

POST /geoipservice.asmx HTTP/1.1

Host: www.webservicex.net

Content-Type: text/xml; charset=utf-8

Content-Length: 371

SOAPAction: "http://www.webservicex.net/GetGeoIP"

 

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

<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:xsd="http://www.w3.org/2001/XMLSchema"xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">

  <soap:Body>

    <GetGeoIP xmlns="http://www.webservicex.net/">

      <IPAddress>158.42.38.1</IPAddress>

    </GetGeoIP>

  </soap:Body>

</soap:Envelope>

12.  Pulsa <Ctrl-C> para cerrar la conexión. Compara la información mandada en SOAP con el caso anterior.  El resultado obtenido ha de ser similar al siguiente:

HTTP/1.1 200 OK

Cache-Control: private, max-age=0

Content-Length: 514

Content-Type: text/xml; charset=utf-8

Server: Microsoft-IIS/7.0

X-AspNet-Version: 4.0.30319

X-Powered-By: ASP.NET

Date: Mon, 30 Jan 2012 20:07:55 GMT

 

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

<soap:Envelope

 xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"

 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

 xmlns:xsd="http://www.w3.org/2001/XMLSchema">

  <soap:Body>

   <GetGeoIPResponse xmlns="http://www.webservicex.net/">

      <GetGeoIPResult>

        <ReturnCode>1</ReturnCode>

        <IP>158.42.38.1</IP>

        <ReturnCodeDetails>Success</ReturnCodeDetails>

        <CountryName>European Union</CountryName>

        <CountryCode>EU</CountryCode>

      </GetGeoIPResult>

    </GetGeoIPResponse>

  </soap:Body>

</soap:Envelope>

 

Recursos adicionales: Ejemplos de algunos servicios Web gratuitos

En la siguiente tabla te mostramos una lista con algunos servicios Web:

 

Nombre

Descripción

Empresa

tipo (codific.)

GetIPService A partir de una IP nos indica el país http://www.webservicex.net/geoipservice.asmx/GetGeoIP?IPAddress=158.42.38.1 WebserviceX.NET SOAP /REST
Google Custom Search

Búsqueda en Web con respuesta JSON o Atom.

https://www.googleapis.com/customsearch/v1?key=KEY&cx=01757666251246:omuauf_lfve&q=Antonio+Banderas
Google REST
(JSON/ XML)

Books API

Búsqueda y altas de libros. No hay que registrar clave. Obsoleto. (aunque sigue funcionando).

http://books.google.com/books/feeds/volumes?q=nadal

Google

REST 
(XML)

Books API (nueva)

Búsqueda y altas de libros.

https://www.googleapis.com/books/v1/volumes?q=nadal

Google

REST (JSON)

Google Maps Geocoding

 

A partir de unas dirección nos da la longitud y latitud. O a la inversa.
http://maps.google.com/maps/api/geocode/xml?address=Gandia

Google

REST (JSON, XML)

Yahoo Finance API

Cotizaciones en bolsa: (www.jarloo.com/yahoo_finance/)

http://finance.yahoo.com/d/quotes.csv?s=BBVA+SAN&f=na

Cambio entre divisas:

http://finance.yahoo.com/d/quotes.csv?s=USDEUR=X&f=l1

Yahoo

REST (CSV)

Valencia Datos Abiertos

Monumentos, fallas, contaminación, trafico, aparca­miento, autobus, recursos sociales, urbanismo, etc.

http://gobiernoabierto.valencia.es/
Ayunta­miento de Valencia REST (JSON, KML, …)
Datos abiertos en España Portal que recopila datos en abierto de  administra­ciones españolas: ministerios, comunidades…
http://datos.gob.es/
Gobierno de España SOAP /REST (XML,…)

Además de estas, te recomendamos que visites la web de la empresa WebserviceX.NET, que ofrece decenas de servicios web gratuitos. Otro sitio interesante es el que ofrece el Ministerio de Fomento de España[1]. Aquí encontrarás un directorio con centenares de servicios web geográficos ofrecidos por instituciones públicas (por ejemplo, el precio del combustible en estaciones de servicio).