Node.js

Introducción a las aplicaciones web

     

1. Tipos de aplicaciones

Cuando estamos utilizando un ordenador, una tablet o un teléfono móvil, ¿qué tipos de aplicaciones o programas podemos estar utilizando? Básicamente distinguimos dos grandes grupos:

1.1. ¿Qué es una aplicación web?

Podemos encontrar diversas definiciones de aplicación web buscando en Internet. Una de las más habituales hace referencia a aplicaciones que se cargan o ejecutan desde un navegador web, accediendo a un servidor. Estas aplicaciones interactúan con el servidor para procesar datos y presentar información al usuario a través del navegador.

Sin embargo, el avance experimentado en este sector durante los últimos años ha ampliado este concepto. Así, una aplicación web sería aquella realizada a partir de lenguajes y tecnologías de desarrollo web, tales como HTML, CSS, JavaScript, PHP, entre otros. Estas aplicaciones pueden ejecutarse en un navegador convencional o mediante un motor de navegador embebido en otro sistema, como el webview de Android o iOS.

De este modo, además de las aplicaciones web “tradicionales”, también tendrían cabida en esta definición las llamadas aplicaciones híbridas (desarrolladas con tecnologías web pero exportadas a formato nativo para diversos dispositivos), y aplicaciones de escritorio que emplean tecnologías web, como framework Electron de JavaScript. Un ejemplo de estas aplicaciones es Visual Studio Code, que aprovecha las ventajas de las tecnologías web para ofrecer experiencias de usuario avanzadas y multiplataforma.

2. Arquitectura de una aplicación web

2.1. ¿Qué es “la web”?

La web es una plataforma global que proporciona acceso a una gran cantidad de recursos como documentos, videojuegos, redes sociales, foros, entre otros. Se popularizó a principios de los años 90 gracias a aplicaciones como el correo electrónico y los chats. Con la llegada de la web 2.0, surgieron nuevas aplicaciones que la potenciaron aún más, como los blogs o las redes sociales. Hoy en día, es común ver vídeos o películas en Internet, algo que hace unos años era impensable.

2.2. Elementos de una aplicación web

En una aplicación web podemos distinguir los siguientes tres elementos principales:

2.3. Funcionamiento de una aplicación web

Como hemos comentado, las aplicaciones web funcionan bajo una arquitectura cliente-servidor, que distribuye las tareas entre los servidores (proveedores de recursos y servicios) y los clientes (solicitantes de dichos recursos y servicios).

Los pasos típicos en la comunicación cliente-servidor son los siguientes:

  1. El cliente inicia sesión en el servidor
  2. El cliente solicita al servidor el recurso o servicio (una página web, un documento, subir información, etc.)
  3. El servidor recibe la petición, la procesa y determina qué programa debe atenderla, enviando la petición a dicho programa.
  4. El programa responsable procesa la petición, prepara la respuesta y la entrega al servidor.
  5. El servidor envía la respuesta al cliente
  6. El cliente puede realizar una nueva petición (volver al paso 2) o terminar la sesión.

En muchos casos, la arquitectura del servidor es multicapa o multinivel. Esto significa que podemos tener diferentes aplicaciones en distintos equipos (o en el mismo) que ofrecen recursos o servicios. Por ejemplo, un servidor de bases de datos puede estar en una máquina, un servidor web en otra (o en la misma que el servidor de bases de datos), y un servidor de correo electrónico en otra máquina. De esta manera, se distribuyen los procesos y el trabajo, e incluso se podrían configurar opciones de seguridad y rendimiento separadas para cada servidor.

Ejemplo: arquitectura de dos o tres niveles

Consideremos una petición de un cliente para obtener un listado de noticias almacenadas en una base de datos. Este proceso puede ser representado con un diagrama de secuencia como sigue:

Ejemplo de arquitectura cliente-servidor
  1. El cliente envía una solicitud para iniciar sesión al servidor web.
  2. Después de iniciar sesión, el cliente solicita un listado de datos al servidor web.
  3. El servidor web procesa la petición, lo que puede implicar realizar algún tipo de lógica o validación antes de enviar la solicitud al servidor de base de datos.
  4. Una vez procesada la petición, el servidor web envía una solicitud de listado al servidor de base de datos.
  5. El servidor de base de datos procesa la solicitud y devuelve el listado de datos solicitados al servidor web.
  6. El servidor web prepara la respuesta y la envía al cliente.
  7. Finalmente, el cliente envía una solicitud para terminar la sesión al servidor web

En una arquitectura de tres niveles, el servidor web y el servidor de bases de datos pueden estar en la misma máquina o en máquinas separadas, cada una con su hardware y control de acceso específicos. Esta configuración es común en aplicaciones web, ya que permiten una mejor gestión y seguridad de los datos.

En una arquitectura de dos niveles, el servidor web también actúa como servidor de bases de datos, respondiendo directamente a las peticiones del cliente sin consultar a otros servidores. Esta configuración es menos flexible y segura, y puede ofrecer un rendimiento inferior en sistemas muy congestionados.

2.4. Localización y acceso a aplicaciones web

Hemos visto la arquitectura de una aplicación web y cómo los elementos del front-end y el back-end interactúan mediante la comunicación cliente-servidor. En este apartado vamos a ver cómo se localizan y acceden a estas aplicaciones web en Internet. Aquí es donde entran en juego los conceptos de dominios y URLs.

Hostings y nombres de dominio

El servidor, que se encarga de recibir peticiones de todos los clientes que se conecten a él y enviarles la información que solicitan, necesita estar disponible desde cualquier lugar en Internet para que los usuarios puedan conectarse a él.

Por tanto, en primer lugar, debemos buscar un servidor en Internet en el que alojar nuestro sitio web. Esto puede hacerse de varias formas:

Además de un espacio de alojamiento, es necesario adquirir un nombre de dominio para que los usuarios puedan recordar y utilizar para identificar nuestra web de forma única en Internet. Este dominio se vincula a la dirección IP del servidor, permitiendo que las solicitudes del cliente lleguen al lugar correcto.

Por ejemplo, cuando escribimos la dirección www.google.es, un sistema conocido como DNS (Sistema de Nombres de Dominio) traduce este nombre de dominio a la dirección IP del servidor donde está alojada la aplicación de Google en español. Este proceso, llamado resolución de DNS, es crucial para el funcionamiento de las aplicaciones web, ya que facilita la localización de recursos en la red global.

El nombre de dominio se adquiere a través del registro de dominio, un proceso gestionado por empresas autorizadas por la ICANN (Internet Corporation for Assigned Names and Numbers). Para registrar un dominio, se debe contactar con una empresa registradora, comprobar que el dominio deseado está disponible, y seguir el proceso de registro.

URLs

Hemos visto que, en el esquema de funcionamiento de una aplicación web, el cliente solicita recursos al servidor. La forma en que los solicita es mediante URLs. Una URL (Uniform Resource Locator) es una secuencia de caracteres que sigue un estándar y que permite denominar recursos dentro de Internet para que puedan ser localizados.

Por ejemplo, cuando escribimos en un navegador una dirección como http://www.miweb.com/paginas/pagina.html, estamos introduciendo una URL para localizar un recurso (en este caso, una página HTML).

Una URL se compone de:

protocolo://subdominio.dominio.com/carpeta/pagina?param=valor

Ejercicio 1:

Hemos visto que la ICANN autoriza a diversas empresas para gestionar el registro de nombres de dominio en Internet. Estas empresas, conocidas como agentes registradores de dominio, ofrecen distintos planes de pago para este servicio. Busca en Internet una lista de agentes registradores de dominio oficiales para España y consulta los precios que tienen algunos de ellos.

3. Protocolos más utilizados

Para que los clientes y servidores puedan comunicarse, es necesario establecer un protocolo de comunicación. Un protocolo define una serie de reglas que especifican qué tipo de mensajes se van a intercambiar, en qué orden y qué contenido va a tener cada tipo de mensaje, asegurando que ambos extremos de la comunicación (cliente y servidor) puedan entenderse.

Todas las comunicaciones en una red (o en Internet) se basan en el protocolo TCP/IP para funcionar. Este protocolo está basado en dos partes:

Sobre la base de TCP/IP, se establecen diversos protocolos específicos según el tipo de aplicación que se vaya a utilizar (web, correo electrónico, subida de archivos, etc). Para las aplicaciones web, los protocolos de comunicación más utilizados son:

Normalmente, los navegadores web cambian automáticamente del protocolo HTTP a HTTPS al conectar con páginas que necesitan ser más seguras (login, datos de pago, etc.). Este cambio puede observarse en la barra de direcciones del navegador, donde se mostrará el protocolo https o el icono de un candado. Sin embargo, es necesario configurar el servidor web para aceptar comunicaciones HTTPS cuando sea necesario.

Otros protocolos, aunque menos utilizados en aplicaciones web, son esenciales para otras aplicaciones en Internet. Por ejemplo, para el envío y recepción de correo electrónico se emplean los protocolos SMTP y POP3/IMAP respectivamente. Para transferir archivos a un servidor remoto, se puede usar el protocolo FTP. Este último protocolo es especialmente útil durante el desarrollo de aplicaciones web para subir actualizaciones al servidor.

3.1. Más sobre HTTP/HTTPS

El protocolo fundamental para las aplicaciones web es HTTP (o su versión segura, HTTPS). En ambos casos, se trata de un protocolo para aplicaciones cliente-servidor, donde los datos que se envían uno y otro tienen un formato determinado.

Peticiones HTTP

Por un lado, están los datos que el cliente envía al servidor, y que se denominan peticiones (en inglés, requests). Estas peticiones se componen, a grandes rasgos, de:

Todos estos datos, a bajo nivel, se encapsulan en paquetes y se fragmentan de acuerdo al protocolo TCP para ser enviados al servidor.

Respuestas HTTP

Por su parte, el servidor, cuando recibe una petición de un cliente, emite una respuesta (en inglés, response) con la información solicitada, o con algún código de error en caso de que hubiera sucedido alguno. Las respuestas se componen de estos elementos:

Monitorización con Google Chrome

Podemos usar el navegador Google Chrome para comprobar lo que cliente (navegador) y servidor se envían en un proceso HTTP. Para ello, vamos al menú de Herramientas para desarrolladores, y más concretamente a la sección Network. Desde ahí, accedemos a una web conocida (por ejemplo, ceice.gva.es), y podemos comprobar la información enviada y recibida:

Monitorización del protocolo HTTP con Google Chrome

Ejercicio 2:

Utiliza Google Chrome (opción de Herramientas para desarrolladores, pestaña Network) para ver el esquema de petición y respuesta HTTP hacia alguna web conocida, como por ejemplo stackoverflow.com. Identifica el código de estado, las cabeceras de respuesta (trata de identificar algunas de ellas) y el contenido.

4. Sistema de nombres de dominio o DNS

En las comunicaciones en redes TCP/IP, cuando un equipo envía un paquete de datos a otro, es necesario identificar tanto el origen como el destino. Las aplicaciones que inician la transmisión deben incorporar valores obligatorios tales como: dirección MAC de origen y de destino, dirección IP de origen y de destino y puerto de origen y de destino. Estos campos siempre deben tener un valor asignado. Esto significa que, cuando se quiere visitar una página web que está alojada en un equipo (por ejemplo, el equipo con el nombre www.google.es), el cliente debe saber cuál es la dirección IP de destino para incorporarla en el paquete.

De hecho, cuando se abre un navegador web es posible acceder a un recurso tanto por su nombre de dominio como por su dirección IP. Siguiendo con el ejemplo anterior, si accedemos a una ventana de terminal y ejecutamos el comando ping www.google.es, obtendremos en la primera línea su dirección IP. Si se coloca esa misma dirección IP en un navegador web, se puede comprobar que devuelve la misma página web de inicio. Sin embargo, como usuarios, nos resulta más fácil dirigirnos a un equipo (host, servidor web, servidor de correo, etc.) utilizando su nombre de dominio que recordar su dirección IP correspondiente.

El DNS (Domain Name System) ó Sistema de Nombres de Dominio es el encargado de proporcionar un mecanismo eficaz para la traducción de direcciones IP de recursos de red a nombres fácilmente legibles y memorizables por las personas, y viceversa. A esta acción se la conoce como resolución DNS. Para ello, utiliza una base de datos distribuida y jerárquica que asocia direcciones IP de hosts, servicios o cualquier recurso conectado a internet o red privada con información de diverso tipo.

El DNS soporta tanto IPv4 como IPv6, y la información se almacena en forma de registros de recursos, en inglés Resource Records (RR), de distintos tipos, los cuales pueden almacenar direcciones IP u otro tipo de información. Esta información se agrupa en zonas, que corresponden a un espacio de nombres o dominio concretos y que son mantenidas por el servidor DNS autoritativo de la misma. A continuación, profundizaremos un poco más en estos y otros conceptos.

4.1. Elementos integrantes del DNS

El DNS se estructura en tres componentes principales: espacio de nombres de dominio, servidores de nombres y resolvers.

Espacio de nombres de dominio

El espacio de nombres de dominio es una estructura jerárquica de árbol invertido donde cada nodo contiene registros de recursos (RR) que proporcionan información sobre los componentes hardware y software que respaldan dicho dominio, como por ejemplo, los hosts, los servidores de nombres, los servidores web, los servidores de correo, etc.

Del nodo raíz, situado en el nivel más alto, parten las ramas que conforman las zonas. Éstas, a su vez, pueden contener uno o más nodos o dominios que a su vez pueden dividirse en subdominios según se baja en la jerarquía.

Jerarquía del espacio de nombres

Es importante no confundir los conceptos de zona y dominio. Un dominio se divide en subdominios para facilitar su administración, y cada parte administrada por uno o más servidores DNS es una zona. El dominio es el árbol del espacio de nombres y la zona es la parte del árbol administrada por un servidor de nombres de dominio concreto.

Ejemplo de zonas y dominios

En la figura anterior hay tantos dominios como recuadros de letras agrupados en 4 zonas delimitadas por las líneas discontinuas. El nombre de dominio correspondiente a cada zona (se nombran según su nodo superior) es A, B.A, C.A, I.C.A. Cada una de estas cuatro zonas tendrá uno o más servidores DNS para gestionarla.

Servidores de nombres

Los servidores de nombres son servidores encargados de mantener y proporcionar información del espacio de nombres o dominios.

Con esta organización de servidores de nombres, y su intercomunicación, se consigue la distribución y redundancia del espacio de dominios.

Resolvers

Un resolver es una rutina del sistema operativo que funciona como intermediaria entre las aplicaciones, el sistema operativo y los servidores DNS. Cuando una aplicación necesita una resolución, ya sea de un nombre o de una dirección IP, llama a esta rutina devolviendo la información deseada de forma compatible para que el host la entienda.

4.2 Proceso de resolución DNS

La principal función de un servidor DNS es responder a consultas de clientes o de otros servidores DNS. Existen dos tipos principales de consultas:

En resumen, las consultas recursivas son generalmente generadas por los clientes DNS, mientras que las consultas iterativas son creadas por los servidores DNS al consultar a otros servidores.

Consultas iterativas y recursivas

En términos generales, el proceso que se sigue en una resolución DNS es el siguiente.

Veamos un ejemplo concreto de resolución de nombres para comprender mejor el proceso. Supongamos que un cliente necesita localizar el equipo www.educacion.gob.es y envía una petición a su servidor DNS. Asumamos también que su servidor no tiene información sobre ese dominio. Así, observaremos cómo se lleva a cabo la resolución completa

Ejemplo del proceso de resolución DNS
  1. Consulta inicial del cliente: un cliente, mediante un navegador web, solicita la resolución del nombre de dominio www.educacion.gob.es. El resolver consulta su caché para ver si tiene la dirección IP almacenada.
  2. Consulta al servidor DNS local: si la dirección no está en la caché, el resolver envía una consulta recursiva al servidor DNS primario o local configurado. Este servidor puede estar dentro de la empresa o en Internet. El servidor DNS local revisa su caché y, si encuentra la información, devuelve la dirección IP correspondiente.
  3. Consultas iterativas del servidor DNS: si el servidor DNS local no puede resolver la consulta, inicia una serie de consultas iterativas para encontrar el servidor autoritativo del dominio:
    • Servidor raíz: consulta al servidor raíz. Si no es autoritativo, el servidor raíz devuelve el nombre del servidor responsable del dominio de primer nivel (.es).
    • Servidor TLD: consulta al servidor del TLD (.es). Si no es autoritativo, devuelve el nombre del servidor responsable del dominio de segundo nivel (.gob.es).
    • Servidor del dominio específico: consulta al servidor del dominio de segundo nivel (.gob.es). Si no es autoritativo, devuelve el nombre del servidor responsable del dominio específico (educacion.gob.es).
  4. Respuesta del servidor autoritativo: finalmente, se llega al servidor autoritativo para el dominio educacion.gob.es, que devuelve la dirección IP de www.educacion.gob.es al servidor DNS local.
  5. Actualización y respuesta:
    • El servidor DNS local actualiza su caché con la nueva información.
    • El servidor DNS local envía la respuesta al resolver del cliente.
    • El resolver del cliente actualiza su caché.
    • La respuesta llega al navegador web en el formato adecuado, completando la solicitud de resolución.

Este proceso consume bastante ancho de banda, por lo que es recomendable implementar una solución DNS interna con caché, especialmente en redes con alto tráfico hacia el exterior, como colegios, universidades, bibliotecas o grandes empresas. Esto permite obtener tiempos de respuesta más rápidos y una mejor experiencia de navegación web.

Herramienta DIG

DIG (Domain Information Gopher) es una herramienta de línea de comandos que realiza búsquedas en los registros DNS, a través de los nombres de servidores, y muestra el resultado. Se puede ejecutar tanto en Linux como en Windows aunque, en este último, es posible que sea necesaria su instalación previa.

Veamos un ejemplo de cómo funciona con el comando dig www.gva.es:

Resultado del comando dig www.gva.es

Explicación de la salida:

Si se ejecuta DIG especificando la opción +trace, se muestra una traza de los servidores por los que pasa la consulta hasta llegar al servidor autoritativo, permitiendo ver la lista completa de nodos y pasos de resolución de un nombre. Esto es muy útil para entender cómo funciona el sistema de nombres de dominio.

5. Patrones de diseño software

Después de revisar los tipos de aplicaciones web, la arquitectura básica, los protocolos más comunes y el papel del DNS, llegamos a un componente esencial en el desarrollo de aplicaciones web robustas y eficientes: los patrones de diseño.

Un patrón de diseño o arquitectura software comprende un conjunto de pautas a seguir, elementos a desarrollar, jerarquías y orden que dotan a una aplicación de una estructura preestablecida, que la hace más propicia para funcionar como debe. Sus principales objetivos son, por un lado, estandarizar la forma en que se desarrollan las aplicaciones, y por otro, elaborar elementos o componentes reutilizables entre diversas aplicaciones, al ajustarse todos a un mismo patrón.

En el ámbito de las aplicaciones web, existen patrones de diseño específicos que nos guían a la hora de estructurar, diseñar y programar estas aplicaciones. Uno de los más utilizados (o quizá el más utilizado) es el patrón MVC, que comentaremos a continuación, pero también han surgido otros (muchos a partir de éste), que han querido dar una vuelta de tuerca más, o adaptarse a las necesidades de aplicaciones web más específicas o concretas. Veremos también algunos de estos patrones en este apartado.

5.1. El patrón MVC

MVC son las siglas de Modelo-Vista-Controlador (o en inglés, Model-View-Controller), y es, como decíamos antes, el patrón por excelencia ahora mismo en el mundo de las aplicaciones web, e incluso muchas aplicaciones de escritorio.

Como su nombre indica, este patrón se basa en dividir el diseño de una aplicación web en tres componentes fundamentales:

Es un patrón de diseño muy conciso y bien estructurado, lo que le ha valido la fama que tiene hoy en día. Entre sus muchas ventajas, permite aislar el código de los tres elementos involucrados (vista, modelo y controlador), de forma que el trabajo es mucho más modular y divisible, pudiendo encargarse de las vistas, por ejemplo, un diseñador web que no tenga mucha idea de programación en el servidor, y del controlador un programador PHP que no tenga muchas nociones de HTML.

En forma de esquema, podríamos representarlo así:

Modelo Vista Controlador

5.2. Otras alternativas a MVC

Como alternativas al patrón MVC, y a raíz de este mismo patrón, surgieron otros algo más específicos. Casi todos ellos tienen como base la parte del modelo (es decir, el acceso y gestión de los datos o información de la aplicación) y la parte de la vista (es decir, la presentación al usuario). Así, podríamos decir que el único punto “discordante” sería el controlador, que en otros patrones se ha sustituido por otros elementos. De hecho, al conjunto de patrones que siguen esta filosofía (es decir, centrarse en la vista y el modelo, y añadir algo más), se les suele llamar en general MVW (en inglés, Movel-View-Whatever, en español, Modelo-Vista-Cualquier cosa). La finalidad de esto es, en algunos casos, descomponer el trabajo realizado por los controladores en varios submódulos, y en otros casos, prescindir directamente del controlador. Veamos algunos de los patrones más populares.

El patrón MVVM

El patrón MVVM, como recogen sus siglas, se centra exclusivamente en los componentes del modelo y de la vista (Modelo-Vista-Vista-Modelo), y prescinde del controlador. De esta forma, el usuario interactúa directamente con la vista, y las acciones o cambios que introduzca en ella afectan directamente al modelo, y viceversa (los cambios en el modelo se reflejan de forma automática en la vista).

Este patrón está cobrando especial relevancia en las llamadas SPA (Single Page Applications), aplicaciones web con una sola página que recarga parcialmente sus contenidos ante las acciones del usuario. En estos casos, no es necesario un controlador que diga qué vista cargar, porque sólo hay una vista principal (que puede estar compuesta por subvistas), y si la estructura es lo suficientemente sencilla, vista y modelo pueden estar intercomunicados sin intermediarios. Algunos frameworks surgidos últimamente han dado aún más peso a este patrón, como es el caso de Angular.

El patrón MOVE

El patrón MOVE sustituye el controlador del patrón MVC por dos elementos. Uno que denomina operaciones (que sería la O de sus siglas), y que englobaría todo el conjunto de acciones que la aplicación es capaz de realizar, y otro que serían los eventos (que sería la E de sus siglas), y que representarían todos aquellos sucesos que desencadenan que se ejecute una operación determinada. Así, las acciones de los usuarios son eventos sobre la aplicación que provocan que se ejecuten determinadas operaciones. Estas operaciones, a su vez, pueden acceder al modelo para obtener o actualizar información, y pueden generar o llamar a una vista que mostrar al usuario como respuesta. Se divide así la tarea de los controladores entre los eventos y las operaciones.

El patrón MVP

El patrón MVP sustituye el controlador (o controladores) del MVC por lo que se denominan presentadores. Estos presentadores son una especie de intermediarios entre el modelo y la vista, de forma que cada vista tiene el suyo propio, y actúa tras la vista para comunicarse con el modelo, obtener los datos, y cargarlos en ella para mostrarlos al usuario. Se tiene así encapsulado con cada vista su presentador, y la aplicación puede considerarse un conjunto de pares vista-presentador, que se encargan de comunicarse con el modelo, que queda por detrás.

6. Recursos necesarios

Para implantar una aplicación web y que los clientes puedan utilizarla, necesitamos contar con una serie recursos hardware y software.

6.1. Lenguajes

Al hablar de aplicaciones web, es importante determinar el lenguaje o lenguajes de programación en que se desarrollan. En el ámbito de las aplicaciones web, distinguimos dos tipos de lenguajes:

6.2. Ejemplos de software

Hemos visto a grandes rasgos el hardware y software que necesitaremos tanto en los clientes como en el servidor. ¿Qué software concreto vamos a utilizar en este curso?

En el caso del navegador para el cliente, existen varias opciones dependiendo del sistema operativo del cliente: Mozilla Firefox, Google Chrome, Internet Explorer / Edge (sólo para Windows), Safari (sólo en Windows y Macintosh), Opera… Posiblemente los dos primeros (Chrome y Firefox) sean las mejores opciones.

En el caso del servidor web, dependerá del tipo de lenguaje servidor que vayamos a utilizar para hacer nuestra página, y del sistema operativo del servidor. En nuestro caso, emplearemos lenguaje PHP, y también JavaScript con el framework Node.js. Para el primero, emplearemos el servidor Apache, que instalaremos a través de algún sistema XAMPP o similar, que integra Apache con un servidor MySQL/MariaDB y el lenguaje PHP preinstalados. Para lo segundo, instalaremos el framework Node.js para construir con él el servidor, y algunos módulos adicionales para facilitar la tarea del desarrollo de la aplicación en sí, como veremos en unidades posteriores.

Si vamos a emplear lenguaje Java (JSP, servlets, etc.), podemos instalar algún servidor sencillo y gratuito como Tomcat, o servidores de aplicaciones más pesados y complejos como Glassfish. También funcionan en todo tipo de sistemas Si optamos por tecnología .NET (ASP.NET), podemos utilizar IIS (Internet Information Services), un servidor web disponible para Windows, ya que esta tecnología sólo funciona en sistemas operativos Windows.

Para el servidor de base de datos, podemos emplear diferentes alternativas, como MySQL/MariaDB, PostreSQL, Oracle, o SQL Server. También podemos optar por sistemas No-SQL, como MongoDB. Todas ofrecen versiones gratuitas (algunas de ellas con recursos limitados para uso personal) y comerciales (más potentes). MySQL, PostgreSQL y Oracle funcionan en diversos sistemas, pero SQL Server es propiedad de Microsoft, y funciona en sistemas Windows. En nuestro caso, optaremos por un servidor MySQL/MariaDB para la comunicación con PHP y Apache (a través del mencionado XAMPP), y por un servidor MongoDB para las aplicaciones que hagamos con Node.js.

IDEs

Para el desarrollo de aplicaciones es necesario contar con un buen entorno de desarrollo o IDE con el que editar el código, depurar y probar las aplicaciones.

Existen multitud de opciones disponibles, la mayoría de ellas gratuitas. Desde entornos de propósito general válidos para muchos lenguajes (Atom, Sublime, Visual Studio Code…) a otros más específicos y orientados a algún lenguaje en concreto, como PhpStorm.

En nuestro caso, optaremos por Visual Studio Code, por su versatilidad y popularidad creciente. Permite instalar multitud de extensiones para trabajar con distintos tipos de lenguajes y frameworks, y nos permite también una fácil integración con PHP y Node.js.

Algunos frameworks útiles

También es conveniente conocer algunos frameworks populares y realmente útiles para el desarrollo de aplicaciones web. Estos frameworks se pueden clasificar dependiendo de si se emplean para la parte del cliente o la del servidor. En el primer caso, podemos hablar de Angular, React, Vue y algunos otros (aunque éstos son hoy por hoy los más populares), pero para el apartado que nos interesa, que son los frameworks en el lado del servidor, nos centraremos en:

6.3. Webs de interés

A continuación se enumeran algunas webs donde consultar o descargar los recursos indicados en este tema, para el desarrollo de aplicaciones en entorno servidor.

Ejercicio 3:

Utiliza la herramienta Google Trends para buscar los términos de Laravel, Symfony y Node.js. Deduce a partir de las búsquedas cuál de ellos crees que es más popular actualmente. Después, acude a la web de InfoJobs y busca ofertas de trabajo con estos tres frameworks, para determinar cuál es el más demandado en la actualidad.