# Rich Internet application

Una rich Internet application (RIA), "aplicación de Internet enriquecida" o "aplicación rica de internet" (ARI), es una aplicación web que tiene la mayoría de las características de las aplicaciones de escritorio tradicionales. Estas aplicaciones utilizan un navegador web estandarizado para ejecutarse y por medio de complementos o mediante una máquina virtual se agregan las características adicionales.
Las RIA surgen como una combinación de las ventajas que ofrecen las aplicaciones web y las aplicaciones tradicionales. Buscan mejorar la experiencia y productividad del usuario.
Normalmente en las aplicaciones web, hay una recarga continua de páginas web cada vez que el usuario pulsa sobre un enlace. De esta forma se produce un tráfico muy alto entre el cliente y el servidor, llegando muchas veces a recargar la misma página con un cambio mínimo.
En los entornos RIA, en cambio, no se producen recargas de página, ya que desde el principio se carga toda la aplicación, y solo se produce comunicación con el servidor cuando se necesitan datos externos como datos de una base de datos o de otros ficheros externos.

## Arquitectura

Generalmente se tiene una aplicación cliente “stateful” y una capa de servicios separada. Las RIA se apoya más sobre un desarrollo “cliente-servidor” en vez de un desarrollo web tradicional, en donde el estado se mantiene en el servidor en sesiones. El cliente sabe acerca de sí mismo y el tipo de datos que está solicitando y únicamente solicita los datos que necesita sin ninguna otra información.

### Cliente

Se maneja la interacción entre el usuario y la interfaz de usuario, el usuario invoca comandos, actualiza vistas y carga datos. Aquí se mantiene el estado de la aplicación, se manejan todas las peticiones de datos hacia el servidor y se controla cómo se presentan los datos.

### Servidor

Aquí se manejan y se procesan todas las peticiones de la aplicación cliente y delega las acciones en el servidor, estas pueden ser, guardar datos en la base de datos, actualizar los archivos del sistema, retornar datos al servidor, o algún tipo de proceso analítico. Determina y le da formato a los datos que son retornados al cliente.

## Aplicaciones

Consisten en el aprovechamiento de la experiencia del usuario en herramientas y funciones de escritorio tan naturales como copiar, cortar y pegar, redimensionar columnas, y ordenar etc., con el alcance y la flexibilidad de presentación y despliegue que ofrecen las aplicaciones o páginas Web junto con lo mejor de la multimedia (voz, vídeo, etc.).
Entre los beneficios principales de aplicaciones RIA tenemos una mejora importante en la experiencia visual, que hacen del uso de la aplicación algo muy sencillo, ofrece mejoras en la conectividad y despliegue instantáneo de la aplicación, agilizando su acceso, garantizan la desvinculación de la capa de presentación es decir acceso a la aplicación desde cualquier computador en cualquier lugar del mundo.

## Características clave

Accesibilidad: AJAX se encuentra de forma nativa en los navegadores web y es el único framework RIA que puede ser encontrado por los diferentes motores de búsqueda. Aunque Adobe Flash ha dado grandes pasos en esta dirección.
Comunicaciones avanzadas: con servidores que soporten nuevas tecnologías se puede mejorar la experiencia del usuario al utilizar protocolos de red optimizados y entradas y salidas asíncronas. Se requiere de una conexión de banda ancha confiable.
Complejidad: soluciones avanzadas puede ser más difíciles de diseñar, desarrollar, implementar y depurar que las aplicaciones web tradicionales.
Consistencia: la interfaz de usuario y las experiencias pueden ser controlada por el sistema operativo, el monitoreo del rendimiento y diagnóstico de errores puede ser difícil.
Instalación y mantenimiento: se requiere de la instalación de un complemento (plug-in) o una máquina virtual o sandbox, que generalmente es más rápida que la instalación de una aplicación tradicional y esta no se puede automatizar. Las actualizaciones son automáticas.
Offline: puede ser usada sin conexión a Internet, reteniendo el estado en la máquina cliente.
Seguridad: se mejora la seguridad por medio de actualizaciones automáticas y sandbox. Pero las extensiones por sí mismas son sujetas a vulnerabilidades.
Rendimiento: puede ser mejorado dependiendo de la aplicación y de las características de la red. Aplicaciones que pueden procesar localmente en el cliente evitan viajes hacia el servidor lo que incrementa su rendimiento. Dándole más trabajo al cliente también se puede incrementar el rendimiento del servidor. Por el contrario los recursos necesarios hacen difícil que las aplicaciones puedan ejecutarse en dispositivos pequeños, móviles o embebidos.
Riqueza: añadiendo características que no son nativas en los navegadores web como captura de video.

## Beneficios

A pesar de que el desarrollo de aplicaciones multimedia para navegadores web está mucho más limitada y es más difícil que otro tipo de aplicaciones de escritorio, los esfuerzos se justifican por varios motivos:
* No necesitan instalación (solo es necesario mantener actualizado el navegador web).
* Las actualizaciones hacia nuevas versiones son automáticas.
* Se pueden utilizar desde cualquier ordenador con una conexión a Internet sin depender del sistema operativo que este utilice.
* Generalmente es menos probable la infección por virus, que utilizando por ejemplo programas ejecutables.
* Más capacidad de respuesta, ya que el usuario interactúa directamente con el servidor, sin necesidad de recargar la página.
* Ofrecen aplicaciones interactivas que no se pueden obtener utilizando solo HTML, incluyendo arrastrar y pegar, cálculos en el lado del cliente sin la necesidad de enviar la información al servidor.
* Evita la problemática del uso de diferentes navegadores al abstraerse de ellos a través de un framework.

## Herramientas y frameworks

Hay muchas herramientas para el desarrollo de aplicaciones RIA que se pueden observar en la lista Frameworks para "Rich Internet Applications".
Entre estas herramientas se pueden resaltar Adobe Flash, JavaFX, y Microsoft Silverlight, por su penetración en el mercado del 96%, 76%, y el 66% respectivamente (informe de agosto de 2012).
Hasta septiembre de 2012 se apreciaba una fuerte tendencia para favorecer las herramientas basadas en HTML5 en lugar de las herramientas basadas en plug-ins lo que nos lleva a resaltar las siguientes herramientas:
* Java applet 4.20,
* HTML5 3.70,
* ZK 6.5,
* GWT 2.10,
* Silverlight 1.70,
* Adobe Flex 1.00,
* JavaFX 0.5.
Esta tendencia se puede corroborar en las siguientes publicaciones:
* Adobe no producirá más versiones de Flash para dispositivos móviles o televisiones,
* Menciones sobre que Microsoft abandonará Silverlight después de la versión 5,
* El fin de los plug-ins para navegadores.