Un marco web ( WF ) o marco de aplicación web ( WAF ) es un marco de software diseñado para respaldar el desarrollo de aplicaciones web , incluidos servicios web, recursos web y API web . Los marcos web proporcionan una forma estándar de crear e implementar aplicaciones web en la World Wide Web . Los marcos web tienen como objetivo automatizar la sobrecarga asociada con las actividades comunes realizadas en el desarrollo web . Por ejemplo, muchos marcos web proporcionan bibliotecas para el acceso a bases de datos , marcos de plantillas y administración de sesiones , y a menudo promueven la reutilización de código . [1] Aunque a menudo apuntan al desarrollo de sitios web dinámicos , también son aplicables a sitios web estáticos . [2]
Como el diseño de la World Wide Web no era inherentemente dinámico, los primeros hipertextos consistían en archivos de texto HTML codificados a mano que se publicaban en servidores web . Cualquier modificación a las páginas publicadas debía ser realizada por el autor de las mismas. En 1993, se introdujo el estándar Common Gateway Interface (CGI) para interconectar aplicaciones externas con servidores web, con el fin de proporcionar una página web dinámica que reflejara las entradas del usuario. [3]
Las implementaciones originales de la interfaz CGI generalmente tenían efectos adversos en la carga del servidor, ya que cada solicitud iniciaba un proceso separado . [4] Las implementaciones más recientes utilizan procesos persistentes, entre otras técnicas, para reducir la huella de recursos del servidor y ofrecer un aumento general del rendimiento. [ cita requerida ]
En 1995 surgieron los primeros entornos de desarrollo de lenguaje/servidor totalmente integrados y se introdujeron nuevos lenguajes específicos para la web, como ColdFusion , PHP y Active Server Pages . [ cita requerida ]
Aunque la gran mayoría de lenguajes para crear páginas web dinámicas tienen bibliotecas para ayudar con tareas comunes, las aplicaciones web a menudo requieren bibliotecas específicas para tareas particulares, como la creación de HTML (por ejemplo, Jakarta Faces ). [ cita requerida ]
A fines de la década de 1990, comenzaron a aparecer marcos maduros de "pila completa", que a menudo reunían múltiples bibliotecas útiles para el desarrollo web en una única pila de software cohesiva para que los desarrolladores web la usaran. [ cita requerida ]
La mayoría de los marcos web se basan en el patrón modelo-vista-controlador (MVC) . [ cita requerida ]
Muchos marcos siguen el patrón arquitectónico MVC para separar el modelo de datos en reglas de negocio (el "controlador") y la interfaz de usuario (la "vista"). Esto generalmente se considera una buena práctica ya que modulariza el código , promueve la reutilización del código y permite aplicar múltiples interfaces. En las aplicaciones web, esto permite presentar diferentes vistas, por ejemplo, ofrecer diferentes páginas web para navegadores móviles y de escritorio, o proporcionar interfaces de servicios web legibles por máquina .
La mayoría de los marcos MVC siguen una arquitectura basada en push, también llamada "basada en acciones". Estos marcos utilizan acciones que realizan el procesamiento requerido y luego "envían" los datos a la capa de vista para representar los resultados. [5] Una alternativa a esto es la arquitectura basada en pull, a veces también llamada "basada en componentes". Estos marcos comienzan con la capa de vista, que luego puede "extraer" resultados de múltiples controladores según sea necesario. En esta arquitectura, se pueden involucrar múltiples controladores con una sola vista.
En una organización de tres niveles , las aplicaciones se estructuran en torno a tres niveles físicos: cliente, aplicación y base de datos. [6] [7] [8] [9] La base de datos normalmente es un RDBMS . La aplicación contiene la lógica empresarial, se ejecuta en un servidor y se comunica con el cliente mediante HTTP . [10] El cliente en aplicaciones web es un navegador web que ejecuta HTML generado por la capa de aplicación. [11] [12] El término no debe confundirse con MVC, donde, a diferencia de la arquitectura de tres niveles, se considera una buena práctica mantener la lógica empresarial alejada del controlador, la "capa intermedia". [13] [14]
Los marcos se construyen para respaldar la construcción de aplicaciones de Internet basadas en un solo lenguaje de programación, y su enfoque va desde herramientas de propósito general como Zend Framework y Ruby on Rails, que aumentan las capacidades de un lenguaje específico, hasta paquetes programables en lenguaje nativo creados en torno a una aplicación de usuario específica, como sistemas de gestión de contenido (CMS), algunas herramientas de desarrollo móvil y algunas herramientas de portal. [15]
Los marcos web deben funcionar de acuerdo con las reglas arquitectónicas de los navegadores y protocolos como HTTP , que no tiene estado . Las páginas web son presentadas por un servidor y luego pueden ser modificadas por el navegador mediante JavaScript . Ambos enfoques tienen sus ventajas y desventajas. [ cita requerida ]
Los cambios de página del lado del servidor generalmente requieren que la página se actualice, pero permiten usar cualquier lenguaje y utilizar más potencia de procesamiento. Los cambios del lado del cliente permiten que la página se actualice en pequeños fragmentos, lo que parece una aplicación de escritorio, pero se limitan a JavaScript y se ejecutan en el navegador del usuario, que puede tener una potencia de procesamiento limitada. Por lo general, se utiliza una combinación de los dos. [16] Las aplicaciones que hacen un uso intensivo de JavaScript y solo actualizan partes de la página se denominan aplicaciones de página única y, por lo general, utilizan un marco web de JavaScript del lado del cliente para organizar el código. [ cita requerida ]
Los ejemplos incluyen Backbone.js , AngularJS , Angular , Ember.js , ReactJS , jQuery UI , Svelte y Vue.js. [17 ]
Los frameworks suelen establecer el flujo de control de un programa y permiten al usuario del framework "engancharse" a ese flujo exponiendo varios eventos. [18] Este patrón de diseño de " inversión de control " se considera un principio definitorio de un framework y beneficia al código al imponer un flujo común para un equipo que todos pueden personalizar de manera similar. [18] Por ejemplo, algunos "microframeworks" populares como Sinatra de Ruby (que inspiró Express.js ) permiten ganchos de "middleware" antes y después de las solicitudes HTTP. Estas funciones de middleware pueden ser cualquier cosa y permiten al usuario definir el registro, la autenticación y la gestión de sesiones, y la redirección. [19]
El almacenamiento en caché de documentos web es el almacenamiento en caché de documentos web para reducir el uso de ancho de banda , la carga del servidor y el " retraso " percibido. Un caché web almacena copias de los documentos que pasan por él; las solicitudes posteriores pueden ser satisfechas desde el caché si se cumplen ciertas condiciones. Algunos marcos de aplicaciones proporcionan mecanismos para almacenar documentos en caché y omitir varias etapas de la preparación de la página, como el acceso a la base de datos o la interpretación de plantillas. [ cita requerida ]
Algunos frameworks web incluyen marcos de autenticación y autorización que permiten al servidor web identificar a los usuarios de la aplicación y restringir el acceso a las funciones en función de algunos criterios definidos. Drupal es un ejemplo que proporciona acceso basado en roles a las páginas y ofrece una interfaz basada en web para crear usuarios y asignarles roles. [ cita requerida ]
Muchos frameworks web crean una API unificada para un backend de base de datos, lo que permite que las aplicaciones web funcionen con una variedad de bases de datos sin cambios de código y permite a los programadores trabajar con conceptos de nivel superior. Además, algunos frameworks orientados a objetos contienen herramientas de mapeo para proporcionar mapeo relacional de objetos , que mapea objetos a tuplas . [20]
Algunos frameworks minimizan la configuración de aplicaciones web mediante el uso de introspección y/o siguiendo convenciones bien conocidas. Por ejemplo, muchos frameworks Java utilizan Hibernate como capa de persistencia, que puede generar un esquema de base de datos en tiempo de ejecución capaz de persistir la información necesaria. Esto permite al diseñador de la aplicación diseñar objetos de negocio sin necesidad de definir explícitamente un esquema de base de datos. Los frameworks como Ruby on Rails también pueden funcionar a la inversa, es decir, definir propiedades de objetos de modelo en tiempo de ejecución basándose en un esquema de base de datos. [20]
Otras características que pueden proporcionar los marcos web incluyen soporte transaccional [21] y herramientas de migración de bases de datos . [20]
La función de mapeo o enrutamiento de URL de un framework es el mecanismo por el cual el framework interpreta las URL. Algunos frameworks, como Drupal y Django, comparan la URL proporcionada con patrones predeterminados mediante expresiones regulares , mientras que otros utilizan técnicas de reescritura para traducir la URL proporcionada a una que el motor subyacente reconocerá. Otra técnica es la de recorrido de grafos , como la que utiliza Zope , donde una URL se descompone en pasos que recorren un grafo de objetos (de modelos y vistas). [ cita requerida ]
Un sistema de mapeo de URL que utiliza la coincidencia de patrones o la reescritura para enrutar y manejar las solicitudes permite el uso de URL más cortas y " amigas", lo que aumenta la simplicidad del sitio y permite una mejor indexación por parte de los motores de búsqueda. Por ejemplo, una URL que termina con "/page.cgi?cat=science&topic=physics" podría cambiarse simplemente a "/page/science/physics". Esto hace que la URL sea más fácil de recordar, leer y escribir para las personas, y proporciona a los motores de búsqueda mejor información sobre el diseño estructural del sitio. Un enfoque de recorrido de gráficos también tiende a generar URL amigables. Una URL más corta como "/page/science" tiende a existir de forma predeterminada, ya que es simplemente una forma más corta del recorrido más largo a "/page/science/physics". [ cita requerida ]
Ajax , abreviatura de " Asynchronous JavaScript and XML ", es una técnica de desarrollo web para crear aplicaciones web. El objetivo es hacer que las páginas web se sientan más responsivas mediante el intercambio de pequeñas cantidades de datos con el servidor en segundo plano, de modo que no sea necesario volver a cargar la página web completa cada vez que el usuario solicita un cambio. Esto tiene como objetivo aumentar la interactividad, la velocidad, la facilidad de mantenimiento y la facilidad de uso de una página web . [22]
Debido a la complejidad de la programación Ajax en JavaScript, existen numerosos frameworks Ajax que se ocupan exclusivamente de la compatibilidad con Ajax. Algunos frameworks Ajax incluso están integrados como parte de frameworks más grandes. Por ejemplo, la biblioteca jQuery de JavaScript está incluida en Ruby on Rails. [ cita requerida ]
Con el creciente interés en el desarrollo de aplicaciones web enriquecidas " Web 2.0 " , la complejidad de programar directamente en Ajax y JavaScript se ha vuelto tan evidente que la tecnología de compiladores ha dado un paso adelante, para permitir a los desarrolladores codificar en lenguajes de alto nivel como Java, Python y Ruby. El primero de estos compiladores fue Morfik , seguido por Google Web Toolkit , con puertos para Python y Ruby en forma de Pyjs y RubyJS que le siguieron algún tiempo después. Estos compiladores y sus bibliotecas de conjuntos de widgets asociadas hacen que el desarrollo de aplicaciones Ajax de medios enriquecidos sea mucho más parecido al desarrollo de aplicaciones de escritorio. [ cita requerida ]
Algunos frameworks proporcionan herramientas para crear y proporcionar servicios web. Estas utilidades pueden ofrecer herramientas similares a las del resto de la aplicación web. [23]
Una serie de nuevos marcos RESTful Web 2.0 ahora brindan una infraestructura de arquitectura orientada a recursos (ROA) para construir colecciones de recursos en una especie de ontología de Web semántica , basada en conceptos del Marco de descripción de recursos (RDF). [ cita requerida ]
El mapeo relacional de objetos, comúnmente conocido como su abreviatura ORM, es una técnica que conecta los objetos enriquecidos de una aplicación a las tablas de un sistema de administración de bases de datos relacionales... Active Record crea automáticamente métodos para permitir que una aplicación lea y manipule datos almacenados dentro de sus tablas.