# Aplicación web

En la ingeniería de software se denomina aplicación web o software web a aquella herramienta que los usuarios pueden utilizar accediendo a un servidor web a través de internet o de una intranet mediante un navegador. En otras palabras, es un programa que se codifica en un lenguaje interpretable por los navegadores web en la que se confía la ejecución al navegador.
Cuando hablamos de software web nos referimos a aplicaciones que se instalan en servidores (propios o de alguna empresa que provea servicios de hosting), ordenadores dedicados a proveer servicios, realizar tareas, ante peticiones de otros ordenadores. Estas aplicaciones web o softwares web son desarrollados por programadores que utilizan entornos de programación Frontend y Backend.
En este caso, los datos y la lógica de negocio quedan centralizados en el propio servidor y los usuarios podrán acceder a ellos por medio de sus propios navegadores web.
Las aplicaciones web son populares debido a lo práctico del navegador web como cliente ligero, a la independencia del sistema operativo, así como a la facilidad para actualizar y mantener aplicaciones web sin distribuir e instalar software a miles de usuarios potenciales. Existen aplicaciones como los correos web, wikis, blogs, tiendas en línea y la propia Wikipedia que son ejemplos bastante conocidos de aplicaciones web.
Es importante mencionar que una página web puede contener elementos que permiten una comunicación activa entre el usuario y la información. Esto permite que el usuario acceda a los datos de modo interactivo, gracias a que la página responderá a cada una de sus acciones, como por ejemplo rellenar y enviar formularios, participar en juegos diversos y acceder a gestores de base de datos de todo tipo.

## Antecedentes

En los primeros tiempos de la computación cliente-servidor, cada aplicación tenía su propio programa cliente que servía como interfaz de usuario que tenía que ser instalado por separado en cada computadora personal de cada usuario. El cliente realizaba peticiones a otro programa —el servidor— que le daba respuesta. Una mejora en el servidor, como parte de la aplicación, requería normalmente una mejora de los clientes instalados en cada computadora personal, añadiendo un coste de soporte técnico y disminuyendo la productividad.
A diferencia de lo anterior, las aplicaciones web generan dinámicamente una serie de páginas en un formato estándar, como HTML o XHTML, soportados por los navegadores web comunes. Se utilizan lenguajes interpretados en el lado del cliente, directamente o a través de plugins tales como JavaScript, Java, Flash, etc., para añadir elementos dinámicos a la interfaz de usuario. Generalmente cada página web en particular se envía al cliente como un documento estático, pero la secuencia de páginas ofrece al usuario una experiencia interactiva. Durante la sesión, el navegador web interpreta y muestra en pantalla las páginas, actuando como cliente para cualquier aplicación web.

## Estructura

Aunque existen muchas variaciones posibles, una aplicación web está normalmente estructurada como una aplicación de tres-capas. En su forma más común, el navegador web ofrece la primera capa, interpretando el código. El servidor que ofrece este código y toda la información es la segunda capa. Por último, una base de datos constituye la tercera y última capa.
El navegador web manda peticiones a la capa intermedia, la cual ofrece servicios valiéndose de consultas y actualizaciones a la base de datos, y, a su vez, proporciona una interfaz de usuario.

### Capa del navegador

Son muy utilizados lenguajes o arquitecturas que no son propiamente lenguajes de programación, como HTML o XML. Se utilizan para servir los datos adecuados a las necesidades del usuario, en función de como hayan sido definidos por el dueño de la aplicación.
Los desarrolladores web generalmente utilizan lenguajes interpretados (scripts) en el lado del cliente para añadir más funcionalidades, especialmente para ofrecer una experiencia interactiva que no requiera recargar la página cada vez (lo que suele resultar molesto a los usuarios). Se han desarrollado tecnologías para coordinar estos lenguajes con las tecnologías en el lado del servidor. Por ejemplo, AJAX es una técnica de desarrollo web que usa una combinación de varias tecnologías.

#### Tecnologías

* HTML
* CSS
* Casi todas las páginas contienen, al menos, un trozo de código escrito en JavaScript.

### Capa del servidor

Existen numerosos lenguajes de programación empleados para el desarrollo de aplicaciones web en el servidor, entre los que destacan:
* PHP
* Java, con sus tecnologías Java Servlets y JavaServer Pages (JSP)
* Javascript en su modalidad SSJS: Server Side Javascript (Javascript del lado del servidor).
* Perl
* Ruby
* Python
* Node.js
* C# y Visual Basic con sus tecnologías ASP/ASP.NET

### Capa de persistencia

Los datos se almacenan en alguna base de datos estándar.

## Consideraciones técnicas

Una ventaja significativa es que las aplicaciones web deberían funcionar igual independientemente de la versión del sistema operativo instalado en el cliente. En vez de crear clientes para Windows, Mac OS X, GNU/Linux y otros sistemas operativos, la aplicación web se escribe una vez y se ejecuta igual en todas partes. Sin embargo, hay aplicaciones inconsistentes escritas con HTML, CSS, DOM y otras especificaciones estándar para navegadores web que pueden causar problemas en el desarrollo y soporte de estas aplicaciones, principalmente debido a la falta de adhesión de los navegadores a dichos estándares web (especialmente versiones de Internet Explorer anteriores a la 7). Adicionalmente, la posibilidad de los usuarios de personalizar muchas de las características de la interfaz (tamaño y color de fuentes, tipos de fuentes, inhabilitar Javascript) puede interferir con la consistencia de la aplicación web.

### Aplicación de internet enriquecida (RIA)

Hasta la popularización de HTML5, otra opción era utilizar Adobe Flash Player o los applets de Java para desarrollar parte o toda la interfaz de usuario. Como casi todos los navegadores incluían soporte para estas tecnologías (usualmente por medio de complementos), las aplicaciones basadas en Flash o Java podían ser implementadas con aproximadamente la misma facilidad.
Las aplicaciones web se ejecutan nativamente desde el navegador, pero existen algunas aplicaciones que funcionan desde el navegador y, además, requieren la instalación de un programa en la computadora para poder utilizarse. Estas aplicaciones se denominan aplicaciones de internet enriquecidas. El motivo de usar este software adicional es que había muchas funcionalidades que los navegadores no podían ofrecer, y estas tecnologías enriquecían las aplicaciones web.

## Uso empresarial

Una estrategia que está emergiendo para las empresas proveedoras de software consiste en proveer acceso vía web a la aplicación. Para aquellas previamente distribuidas, como los programas de escritorio, se puede optar por desarrollar una aplicación totalmente nueva o simplemente por adaptar la aplicación para ser usada con una interfaz web. Estos últimos programas permiten al usuario pagar una cuota mensual o anual para usar la aplicación, sin necesidad de instalarla en la computadora del usuario. A esta estrategia de uso se la denomina Software como servicio y a las compañías desarrolladoras se les denomina proveedores de servicios de aplicación (ASP), un modelo de negocio que está atrayendo la atención de la industria del software.

## Ventajas

* Ahorra tiempo: se pueden realizar tareas sencillas sin necesidad de descargar ni instalar ningún programa.
* Consumo de recursos bajo: dado que toda (o gran parte) de la aplicación no se encuentra en nuestra computadora, muchas de las tareas que realiza el software no consumen recursos nuestros porque se realizan desde otra computadora.
* Multiplataforma: se pueden usar desde cualquier sistema operativo porque solamente es necesario tener un navegador.
* Virus/malware: son menos proclives a ser afectados por los virus o programas maliciosos de cualquier índole instalado en el equipo, aunque no sean inmunes a ellos.
* Aumento de funcionalidades: los navegadores ofrecen cada vez más y mejores funcionalidades para crear aplicaciones web enriquecidas.
* Compatibilidad: basta tener un navegador actualizado para poder utilizarlas.
* Portables: es independiente de la computadora donde se utilice (PC de sobremesa, portátil) porque se accede a través de una página web (solamente es necesario disponer de acceso a Internet). La reciente tendencia al acceso a las aplicaciones web a través de teléfonos móviles requiere sin embargo un diseño específico (responsive web design) de los ficheros CSS para no dificultar el acceso de estos usuarios.
* Almacenamiento: no ocupan almacenamiento en nuestro disco duro.
* Actualizaciones inmediatas: como el software lo gestiona el propio desarrollador, cuando nos conectamos estamos usando siempre la última versión que haya lanzado.
* Disponibilidad: suele ser alta porque el servicio se ofrece desde múltiples localizaciones para asegurar la continuidad del mismo.
* Colaboración: gracias a que el acceso al servicio se realiza desde una única ubicación es sencillo el acceso y compartición de datos por parte de varios usuarios. Tiene mucho sentido, por ejemplo, en aplicaciones en línea de calendarios u oficina.

## Inconvenientes

* Las aplicaciones web requieren navegadores web totalmente compatibles para funcionar. Incluso muchas veces requieren las extensiones apropiadas y actualizadas para operar.
* La aplicación web desaparece si así lo requiere el desarrollador o si el mismo se extingue. Las aplicaciones tradicionales, en general, pueden seguir usándose en esos casos.
* El usuario, en general, no tiene libertad de elegir la versión de la aplicación web que quiere usar. Un usuario podría preferir usar una versión más antigua, hasta que la nueva sea probada.
* En teoría, el desarrollador de la aplicación web puede rastrear cualquier actividad que el usuario haga. Esto puede traer problemas de privacidad.
* Habitualmente ofrecen menos funcionalidades que las aplicaciones de escritorio. Se debe a que las funcionalidades que se pueden realizar desde un navegador son más limitadas que las que se pueden realizar desde el sistema operativo.
* La disponibilidad depende de un tercero, el proveedor de la conexión a internet o el que provee el enlace entre el servidor de la aplicación y el cliente. Así que la disponibilidad del servicio está supeditada al proveedor.