Aplicaciones Web (I)

Buenos días hackers!
Esta es una entrada distinta y no menos importante. En informática una aplicación es un software que permite al usuario realizar una determinada tarea o servicio.
Una aplicación web es simplemente un software creado para ejecutarse mediante un navegador (el cliente). La diferencia clara con las aplicaciones de escritorio, es que estas pueden acceder a todo el hardware del ordenador. En una aplicación web el hardware queda oculto al programador.
Otra diferencia existente esta, en que los navegadores no tienen la capacidad para compilar código de lenguajes como C o Java, pero si tienen interpretes muy potentes para lenguajes como Javascript, como por ejemplo el motor V8 del navegador Chrome.
Existen unas ventajas y desventajas de las aplicaciones web frente a las aplicaciones de escritorio.

Ventajas:

  • Gran compatibilidad: No requieren un sistema operativo en concreto, tanto en entornos de escritorio como en móviles. El único requisito es disponer de un navegador instalado en el sistema.
  • Mantenimiento: Las aplicaciones web se actualizan, pero solo en el servidor donde se alojan, eso quiere decir que el usuario no tiene que actualizar nada y menos instalar nada en su ordenador. Como se dijo anteriormente únicamente del navegador (cliente).
  • Uso sencillo por los usuarios: El navegador es el software usado, y es bien conocido por todo el mundo con una interfaz gráfica sencilla e intuitiva. 
  • Datos almacenados en base de datos.
  • Bajo coste: No existe formato físico de la aplicación web, es digital donde el software se encuentra en Internet. 
  • Sencilla accesibilidad: Las aplicaciones web son accesibles desde cualquier máquina y desde cualquier parte del mundo. Existe una interrelación entre usuario y aplicación.



Desventajas:

  • Hardware desaprovechado: No es necesario tener un ordenador más o menos potente que otro, ya que las aplicaciones web depende únicamente del navegador.
  • Conectividad: Sin conexión a Internet, las aplicaciones web carecen de sentido. Aunque actualmente esto no es un problema ya que estamos interconectados. 
  • Dificultad para el desarrollador: Existe una dificultad clara para el programador frente a desarrollar una aplicación de escritorio. El proceso es diferente debido a la conexión a Internet, la depuración de código en diferentes lenguajes y la espera de peticiones a los servidores. 
  • Control excesivo de nuestra información: Una aplicación de escritorio, al poder estar offline nuestros datos e información se queda almacenada en nuestra máquina sin que exista peligro alguno, a no ser que exista conexión a internet y mediante un troyano nos puedan estar espiando de una forma u otra. En una aplicación web los datos se almacenan en servidores de bases de datos, dependemos de terceras personas y de la ética de la empresa que almacenan nuestros datos de que no se corra el peligro de fugas de información. Si una persona mal intencionada accede al servidor de base de datos, puede obtener información confidencial de miles o millones de usuarios, poniendo en peligro dicha integridad.  

Los lenguajes y tecnologías en el lado del cliente son los elementos, una vez traducidos, para ser interpretado por el navegador normalmente en un documento HTML.
El cliente realiza una petición http al servidor web a la espera de una página que contiene código HTML y otros elementos pertenecientes a otros lenguajes, como por ejemplo:

  • CSS: Es un lenguaje de estilos que permite modificar la apariencia de una web. Es importante debido a que el cliente, a parte de esperar una completa funcionalidad de la aplicación web, exige cierta belleza en la apariencia. 
  • Javascript: Es un lenguaje sencillo y potente interpretado, cuyo código se puede incluir en una página web. Permite cierto dinamismo en la página al igual que interactividad. También es un lenguaje en el lado del servidor, convirtiéndose en un lenguaje full-stack. 
  • Flash: Es un software que se suele incrustar en el código HTML de tipo object haciendo referencia a un archivo de tipo SWF. Los archivos reproducibles de Adobe Flash, que tienen generalmente la extensión de archivo SWF, pueden aparecer en una página web para ser vistos en un navegador web, o pueden ser reproducidos independientemente por un reproductor Flash.
  • Silverlight: Es similar al anterior, pero propietario de Microsoft. 
  • Applets de Java: Se incrusta en el código HTML con el nombre de applet. Estan escritos en el lenguaje de programación Java. Pueden ejecutarse en el navegador requiriendo de Java Virtual Machine (JVM). 

 Esquema de el lado del cliente: 

El cliente introduce una dirección para realizar una petición http al servidor web. Los paquetes http salen por el router domestico hasta nuestro proveedor de servicios (ISP), para realizar la petición al servidor web solicitando un recurso. El servidor web busca dicho recurso y envia al cliente un documento HTML con elementos incrustados (SWF, Javascript, applet de Java…) que será interpretado por el navegador. 
Una vez el navegador lo interpreta, muestra al usuario con un formato entendible.

En la actualidad están en desuso tecnologías avanzadas en el lado del cliente como puede ser Flash, debido al auge de HTML5. Sin embargo Javascript es cada vez más potente, obligando a los navegadores a procesar aplicaciones más avanzadas en este lenguaje. Todo el proceso descrito anteriormente es oculto al usuario, y con un fin favorable al no tener que instalar nada en su máquina, simplemente tener el navegador actualizado.
  

Funcionamiento del lado del servidor: La programación web como se explico antes, dista de una clara diferencia con la programación de aplicaciones de escritorio. Esta diferencia reside en que dependiendo del lado del cliente (navegador) o el lado del servidor (servidor web), se usará un distinto lenguaje de programación. 
Cuando el cliente hace una petición http a un recurso web, el servidor que contiene dicho recurso se encuentra con componentes del lado del servidor (PHP, .NET, Python…) y pide al servidor de aplicaciones la traducción en formato entendible por el cliente (navegador). El resultado lo envía el servidor web o servidor http al cliente. 
La mayoría de veces, las peticiones http son la entrega de un documento HTML.
Los servidores web tienen la capacidad de resolver las peticiones http, pero no traducen el código de los documentos que se entregan al cliente, es decir, se necesita de los servidores de aplicaciones para su traducción. 
Los servidores de aplicaciones traducen el código a través de lenguajes del lado del servidor como pueden ser Python, PHP o Java. Además el código del lado del servidor puede implicar el acceder a otros servidores como por ejemplo un servidor de base de datos.
Actualmente los servidores web actuan también como servidores de aplicaciones ya que estos son simples módulos de software, aunque es importante la diferencia ya que unos se encargan de resolver peticiones http y los otros de traducir lenguajes de servidor.

La ventaja existente de este funcionamiento es que la parte pesada se la lleva la parte del servidor en cuanto a trabajo de procesamiento se refiere.
Al ver la diferencia entre los distintos lados de este funcionamiento, es un proceso complejo el desarrollo web debido a la existencia de los elementos del lado del cliente (front-end) y del servidor (back-end). Por tanto habrá personal dedicada a distintos lenguajes de programación para una misma aplicación web.