59. Qué son los servicios web

Published: Dec. 14, 2015, 5:54 a.m.

Hoy te hablamos de una tecnología que utiliza un conjunto de protocolos y estándares facilitando el intercambio de información entre sistemas. Estos sistemas o aplicaciones pueden estar programados en diferentes lenguajes de programación y funcionando en diferentes sistemas operativos. Hoy hablaremos de qué son los servicios web.

Y como siempre, recuerda que tenemos activa la encuesta para los oyentes. Cualquier duda nos la puedes hacer llegar a través del formulario de contacto, por Twitter y Facebook. Y si quieres estar al día de las novedades de nuestra web la lista de distribución te está esperando.

Antes de meternos en materia te queremos comunicar de una noticia que ha salido a principios de diciembre. Swift, el lenguaje de programación de Apple, ha sido liberado por fin. Tras el anuncio en la keynote de principios de año, Apple a decidido compartir el código para la plataforma Linux.

Swift es un lenguaje de propósito general, enfocado a desarrollar aplicaciones para móviles (iOS) y sobre mesa o portátiles (Mac OSX). Se puede considerar el homólogo de C# de Microsoft.

Pero, ¿qué quiere decir esto? en principio esto supondría que no necesitamos tener un Mac para programar aplicaciones para los sistemas operativos de Apple. Es un gran adelanto debido a que hasta día de hoy, solo si tenías un Mac podías programar para sus plataformas. Veremos cuando está disponible para Windows, si algún día lo está, para poder desarrollar aplicaciones Apple en Windows.

Si quieres saber más sobre este lenguaje puedes acceder a los siguientes enlaces:

Web oficial
Código fuente
Repositorio GitHub
Bueno pues comentada la noticia de esta semana, sigamos con el tema que nos lleva a este capítulo, los servicios web.

Un poco de historia

Los servicios web surgieron a principios de los años 90, gracias a la rápida evolución de Internet, de las LAN y las WAN. En la década de los 80 se crearon muchas aplicaciones con diferentes lenguajes de programación y en sistemas operativos distintos. Surgió la necesidad de intercambiar información entre dichos sistemas y gracias a esto, surgieron los servicios web dando solución a este problema.

LAN (Local Area Network) red de área local, una red que abarca un área reducida como una oficina o una casa.

WAN (Wide Area Network) red de área amplia, una red que engloba varias redes LAN y varias ubicaciones físicas. Si una LAN es una casa de un edificio, una WAN podría ser la red formada por todas esas redes LAN, el propio edificio.

Los servicios web pretenden solucionar el problema de intercambio de información entre aplicaciones. Su nombre viene dado debido a que fueron diseñados para residir en un servidor web. La invocación de estos servicios suele ser a través de HTTP o HTTPS, es la forma más común, esto nos asegura que pueda ser llamado por cualquier aplicación que tenga un puerto HTTP/HTTPS abierto, vamos, casi cualquier máquina.

En la actualidad se utiliza para multitud de aplicaciones como dispositivos móviles, webs, cloud computing, mantenimiento código heredado o legado, etc...

¿Qué es un servicio web?

Podemos describir un servicio web de forma técnica como un componente de software que es accesible a través de la red. Engloba varias tecnologías aunque en sí mismo no podemos catalogarlo como una tecnología. Yo diría que es más bien un método o una forma de poder intercambiar información a través de protocolos y de estándares como, XML, HTTP, SOAP, REST y WSDL. Hablaremos más detenidamente de estos términos más adelante.

Los servicios web nos permiten diseñar software modular, software dividido en módulos siendo más mantenible y manejable, y servicios distribuidos en diferentes máquinas conectadas en red.

La clave de los servicios web es la interoperabilidad, el intercambio de información entre sistemas sin importar el sistema operativo, el dispositivo o el lenguaje de programación. Un servicio web tiene un funcionamiento parecido al de un sitio web. Si en la web tradicional la respuesta del servidor es un archivo HTML, fácilmente entendible por los humanos, en los servicios web este archivo es un XML o un formato del tipo JSON, fácilmente entendible por las máquinas. Por este motivo los servicios web también se conocen como la web para máquinas.

Características principales de los servicios web

La finalidad de los servicios web es la transmisión de datos entre sistemas distintos, esto se puede hacer de muchas maneras pero, para que se considere un servicio web debe cumplir ciertas características.

Debe ser accesible a través de la red o Internet, normalmente mediante los protocolos HTTP.
La codificación de los mensajes deben ser en un lenguaje estándar como XML o JSON.
Debe contener una descripción de sí mismo para que cualquier aplicación pueda consumirlo de una forma automática.
Debe poder ser localizado y disponer de un mecanismo para encontrarlo de una manera automática.
Tipos de servicios web

Existen dos grandes tipos de servicios web SOAP y REST. Los dos cumplen las características especificadas anteriormente.

SOAP (Simple Object Access Protocol) Se trata de un protocolo de comunicación estándar, bajo el amparo de la W3C, que define como se deben comunicar dos sistemas a través de archivos XML. Este protocolo puede ser utilizado de dos maneras diferentes según convenga:

Mensajes orientados al documento. Este tipo de comunicación comparte la información entre dos o más aplicaciones a través de ficheros XML.
Mensajes orientados a RPC (Remote Procedure Calls), llamadas a procedimientos remotos. Es un mecanismo que permite invocar métodos, funciones o procedimientos de aplicaciones a través de un sistema de mensajes. Se envía un mensaje que tiene el nombre del procedimiento junto con los parámetros. La respuesta de la invocación del procedimiento se envía al cliente a través de otro mensaje.
Este protocolo estipula los mensajes SOAP con una estructura definida. Se pueden consultar las especificaciones técnicas que ofrece la W3C.

Para ver un ejemplo puedes ir a esta página web, verás un mensaje SOAP típico y la respuesta por parte del servidor.

Una de las características de los servicios web es que tienen que tener la capacidad de ser descritos para que automáticamente puedan ser invocados. Esto se hace a través del lenguaje de programación WDSL (Web Services Description Language) lenguaje de descripción de servicios web. Este lenguaje describe los requisitos del protocolo y los formatos de los mensajes. Un ejemplo lo puedes encontrar aquí.

El punto fuerte de los servicios web SOAP es la seguridad, esto es lo que le hace diferente a los servicios web REST que veremos a continuación.

REST (Representational State Transfer) Transferencia de estado representacional, también llamados RESTful, es una arquitectura de software para sistemas distribuidos. Al igual que SOAP, también permite el envío de mensajes orientados al documento y mensajes orientados a RPC. Son servicios web más fáciles que usar y se suele decir que es la manera ágil de crear servicios web por su sencillez.

Este tipo permite el intercambio de diferentes formatos de archivos estándar como XML y JSON. Sirve para obtener datos y para ejecutar operaciones sobre ellos. Se suelen utilizar a través del protocolo HTTP o HTTPS.

Se dice que este tipo de servicios está orientado a los recursos. Normalmente cada recurso tiene asignado una URI donde accedemos. La respuesta es en los formatos ya mencionados XML o JSON, son los más típicos aunque no los únicos.

Un ejemplo puede ser la API de Spreaker, el hosting de nuestros capítulos del podcast. Por ejemplo, si quieres obtener la información de nuestra cuenta en formato JSON solo tienes que acceder aquí, esto sería un recurso. Si quieres obtener un listado de todos los episodios del pocast puedes acceder aquí.

Como puedes comprobar en los enlaces anteriores, la información presentada es poco legible para el ser humano pero, créeme que para una máquina resulta muy sencillo.

Conclusión

Los servicios web son un recurso muy importante cuando estamos trabajando con una aplicación que tiene versiones en diferentes plataformas (Windows, Mac OSX, Linux, Android o iOS) y dispositivos (móvil, tablet, web, desktop, Arduino oRaspberry Pi).

No hay un lenguaje específico para crear servicios web, existen diferentes APIs, frameworks, librerías y herramientas que nos facilitan esta tarea.

Si lo que realmente importa es la seguridad, SOAP es la solución, es más complejo pero es más seguro. Si por el contrario lo que necesitas es algo sencillo y escalable, es recomendable utilizar REST.

Por último no puedo dejar pasar la oportunidad de hacer mención a WCF (Windows Communication Foundation) es un framework para la creación de aplicaciones orientadas a servicios. De esto hablaremos en otro capítulo de nuestro podcast.

Recurso del día

SoapUI

SoapUI es una solución multiplataforma de código abierto para testear y hacer pruebas funcionales con los servicios web de tu aplicación. Soporta los estándares SOAP y REST. Gracias a su interfaz gráfica podrás automatizar la batería de pruebas que te asegure el buen funcionamiento de tu sistema. Si todavía tu servicio web no está creado, podrás simular su comportamiento a través de mocks gracias al MockServices. También incluye un sistema de informes bastante completo para obtener los reportes en PDF, HTML, Word o Excel.

Muchas gracias a todos por los comentarios y valoraciones que nos hacéis en iVoox, iTunes y en Spreaker, nos dan mucho ánimo para seguir con este proyecto.