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 los gastos generales asociados 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 gestió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 de las páginas publicadas debe ser realizada por el autor de las páginas. En 1993, se introdujo el estándar Common Gateway Interface (CGI) para interconectar aplicaciones externas con servidores web, para proporcionar una página web dinámica que reflejara las entradas de los usuarios. [3]
Sin embargo, las implementaciones originales de la interfaz CGI generalmente tenían efectos adversos en la carga del servidor, porque cada solicitud iniciaba un proceso separado . [4] Las implementaciones más recientes utilizan procesos persistentes, entre otras técnicas, para reducir la huella en los recursos del servidor y ofrecer un aumento general del rendimiento. [ cita necesaria ]
En 1995, surgieron por primera vez entornos de desarrollo de lenguaje/servidor totalmente integrados y se introdujeron nuevos lenguajes específicos de la web, como ColdFusion , PHP y Active Server Pages . [ cita necesaria ]
Aunque la gran mayoría de los 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 necesaria ]
A finales 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 la usaran los desarrolladores web. [ cita necesaria ]
La mayoría de los marcos web se basan en el patrón modelo-vista-controlador (MVC) . [ cita necesaria ]
Muchos marcos siguen el patrón arquitectónico MVC para separar el modelo de datos en reglas comerciales (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, ofreciendo diferentes páginas web para navegadores móviles frente a navegadores de escritorio, o proporcionando 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 las 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 están diseñados para respaldar la construcción de aplicaciones de Internet basadas en un único lenguaje de programación, y su enfoque abarca 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 alrededor de una aplicación de usuario específica, como sistemas de gestión de contenidos (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 proporcionadas por un servidor y luego el navegador puede modificarlas mediante JavaScript . Cualquiera de los dos enfoques tiene sus ventajas y desventajas. [ cita necesaria ]
Los cambios en la página del lado del servidor normalmente requieren que la página se actualice, pero permiten utilizar cualquier idioma y utilizar más potencia informática. Los cambios del lado del cliente permiten que la página se actualice en pequeñas partes, lo que parece una aplicación de escritorio, pero se limita a JavaScript y se ejecuta en el navegador del usuario, que puede tener una potencia informática limitada. Normalmente se utiliza alguna 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 una sola página y normalmente utilizan un marco web JavaScript del lado del cliente para organizar el código. [ cita necesaria ]
Los ejemplos incluyen Backbone.js , AngularJS , Angular , Ember.js , ReactJS , jQuery UI , Svelte y Vue.js. [17]
Los marcos generalmente establecen el flujo de control de un programa y permiten al usuario del marco "conectarse" 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 marco 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 enlaces 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 el redireccionamiento. [19]
El almacenamiento en caché web es el almacenamiento en caché de documentos web para reducir el uso del 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 satisfacerse desde la memoria caché si se cumplen ciertas condiciones. Algunos marcos de aplicaciones proporcionan mecanismos para almacenar en caché documentos 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 necesaria ]
Algunos marcos web vienen con 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 según algunos criterios definidos. Drupal es un ejemplo que proporciona acceso a páginas basado en roles y proporciona una interfaz basada en web para crear usuarios y asignarles roles. [ cita necesaria ]
Muchos marcos web crean una API unificada para el backend de una 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 marcos orientados a objetos contienen herramientas de mapeo para proporcionar mapeo relacional de objetos , que asigna objetos a tuplas . [20]
Algunos marcos minimizan la configuración de la aplicación web mediante el uso de introspección y/o siguiendo convenciones bien conocidas. Por ejemplo, muchos marcos de Java utilizan Hibernate como capa de persistencia, que puede generar un esquema de base de datos en tiempo de ejecución capaz de conservar la información necesaria. Esto permite al diseñador de aplicaciones diseñar objetos comerciales sin necesidad de definir explícitamente un esquema de base de datos. Los marcos como Ruby on Rails también pueden funcionar a la inversa, es decir, definir propiedades de los objetos del modelo en tiempo de ejecución en función de un esquema de base de datos. [20]
Otras características que los marcos web pueden proporcionar incluyen soporte transaccional [21] y herramientas de migración de bases de datos . [20]
La función de enrutamiento o mapeo de URL de un marco es el mecanismo mediante el cual el marco interpreta las URL. Algunos marcos, como Drupal y Django, comparan la URL proporcionada con patrones predeterminados utilizando expresiones regulares , mientras que otros utilizan técnicas de reescritura para traducir la URL proporcionada a una que el motor subyacente reconozca. Otra técnica es la del recorrido de gráficos , como la que utiliza Zope , donde una URL se descompone en pasos que atraviesan un gráfico de objetos (de modelos y vistas). [ cita necesaria ]
Un sistema de mapeo de URL que utiliza coincidencia de patrones o reescritura para enrutar y manejar solicitudes permite utilizar URL más cortas y " amigables ", 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 en "/page.cgi?cat=science&topic=physics" podría cambiarse a simplemente "/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 transversal de gráficos también tiende a dar como resultado la creación de URL amigables. Una URL más corta como "/página/ciencia" tiende a existir de forma predeterminada, ya que es simplemente una forma más corta del recorrido más largo hasta "/página/ciencia/física". [ cita necesaria ]
Ajax , abreviatura de " JavaScript y XML asincrónicos ", es una técnica de desarrollo web para crear aplicaciones web. La intención es hacer que las páginas web se sientan más receptivas intercambiando pequeñas cantidades de datos con el servidor detrás de escena, de modo que no sea necesario recargar toda la página web cada vez que el usuario solicite un cambio. Esto tiene como objetivo aumentar la interactividad, velocidad, mantenibilidad y usabilidad de una página web . [22]
Debido a la complejidad de la programación Ajax en JavaScript, existen numerosos marcos Ajax que se ocupan exclusivamente del soporte Ajax. Algunos marcos Ajax incluso están integrados como parte de marcos más grandes. Por ejemplo, la biblioteca jQuery JavaScript está incluida en Ruby on Rails. [ cita necesaria ]
Con el creciente interés en desarrollar aplicaciones web ricas " Web 2.0 " , la complejidad de programar directamente en Ajax y JavaScript se ha vuelto tan evidente que ha intervenido la tecnología de compilación para permitir a los desarrolladores codificar en lenguajes de alto nivel como Java, Python y Rubí. El primero de estos compiladores fue Morfik, seguido de Google Web Toolkit , y algún tiempo después le siguieron adaptaciones a Python y Ruby en forma de Pyjs y RubyJS. Estos compiladores y sus bibliotecas de conjuntos de widgets asociados hacen que el desarrollo de aplicaciones Ajax de medios enriquecidos sea mucho más parecido al desarrollo de aplicaciones de escritorio. [ cita necesaria ]
Algunos marcos proporcionan herramientas para crear y proporcionar servicios web. Estas utilidades pueden ofrecer herramientas similares al resto de la aplicación web. [23]
Varios marcos RESTful Web 2.0 más nuevos ahora proporcionan una infraestructura de arquitectura orientada a recursos (ROA) para crear 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 necesaria ]
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 con tablas en 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 los datos almacenados dentro. sus tablas.