Веб-фреймворк ( WF ) или фреймворк веб-приложений ( WAF ) — это программный фреймворк , предназначенный для поддержки разработки веб-приложений , включая веб-сервисы, веб-ресурсы и веб-API . Веб-фреймворки предоставляют стандартный способ создания и развертывания веб-приложений во всемирной паутине . Веб-фреймворки нацелены на автоматизацию накладных расходов, связанных с обычными действиями, выполняемыми в веб-разработке . Например, многие веб-фреймворки предоставляют библиотеки для доступа к базам данных , шаблонные фреймворки и управление сеансами , и они часто способствуют повторному использованию кода . [1] Хотя они часто нацелены на разработку динамических веб-сайтов , они также применимы к статическим веб-сайтам . [2]
Поскольку дизайн Всемирной паутины не был изначально динамическим, ранний гипертекст состоял из вручную закодированных текстовых файлов HTML , которые публиковались на веб-серверах . Любые изменения в опубликованных страницах должны были выполняться автором страниц. В 1993 году был введен стандарт Common Gateway Interface (CGI) для взаимодействия внешних приложений с веб-серверами, чтобы обеспечить динамическую веб-страницу , отражающую вводимые пользователем данные. [3]
Однако первоначальные реализации интерфейса CGI обычно оказывали неблагоприятное воздействие на нагрузку сервера, поскольку каждый запрос запускал отдельный процесс . [4] Более поздние реализации используют постоянные процессы среди других методов для уменьшения объема ресурсов сервера и предлагают общее повышение производительности. [ необходима ссылка ]
В 1995 году впервые появились полностью интегрированные среды разработки серверов и языков, а также были введены новые веб-языки, такие как ColdFusion , PHP и Active Server Pages . [ необходима ссылка ]
Хотя подавляющее большинство языков для создания динамических веб-страниц имеют библиотеки, помогающие решать общие задачи, веб-приложениям часто требуются специальные библиотеки для определенных задач, таких как создание HTML (например, Jakarta Faces ). [ необходима цитата ]
В конце 1990-х годов начали появляться зрелые фреймворки «полного стека», которые часто объединяли несколько библиотек, полезных для веб-разработки , в единый связный программный стек для использования веб-разработчиками. [ необходима цитата ]
Большинство веб-фреймворков основаны на шаблоне модель-представление-контроллер (MVC) . [ требуется ссылка ]
Многие фреймворки следуют архитектурному шаблону MVC, чтобы разделить модель данных на бизнес-правила («контроллер») и пользовательский интерфейс («представление»). Это обычно считается хорошей практикой, поскольку это модуляризует код , способствует повторному использованию кода и позволяет применять несколько интерфейсов. В веб-приложениях это позволяет представлять различные представления, например, обслуживать разные веб-страницы для мобильных и настольных браузеров или предоставлять машиночитаемые интерфейсы веб-сервисов .
Большинство фреймворков MVC следуют архитектуре на основе push, также называемой «основанной на действиях». Эти фреймворки используют действия, которые выполняют требуемую обработку, а затем «проталкивают» данные в слой представления для отображения результатов. [5] Альтернативой этому является архитектура на основе pull, иногда также называемая «основанной на компонентах». Эти фреймворки начинаются со слоя представления, который затем может «извлекать» результаты из нескольких контроллеров по мере необходимости. В этой архитектуре несколько контроллеров могут быть задействованы с одним представлением.
В трехуровневой организации приложения структурированы вокруг трех физических уровней: клиент, приложение и база данных. [6] [7] [8] [9] База данных обычно представляет собой СУРБД . Приложение содержит бизнес-логику, работающую на сервере, и взаимодействует с клиентом с помощью HTTP . [10] Клиент в веб-приложениях представляет собой веб-браузер, который запускает HTML, сгенерированный прикладным уровнем. [11] [12] Этот термин не следует путать с MVC, где, в отличие от трехуровневой архитектуры, считается хорошей практикой держать бизнес-логику подальше от контроллера, «среднего уровня». [13] [14]
Фреймворки создаются для поддержки разработки интернет-приложений на основе одного языка программирования, начиная от инструментов общего назначения, таких как Zend Framework и Ruby on Rails, которые расширяют возможности определенного языка, до программируемых пакетов на родном языке, созданных вокруг определенного пользовательского приложения, такого как системы управления контентом (CMS), некоторые инструменты мобильной разработки и некоторые инструменты портала. [15]
Веб-фреймворки должны функционировать в соответствии с архитектурными правилами браузеров и протоколов , таких как HTTP , который не имеет состояния . Веб-страницы обслуживаются сервером и затем могут быть изменены браузером с помощью JavaScript . У каждого подхода есть свои преимущества и недостатки. [ необходима цитата ]
Изменения на стороне сервера обычно требуют обновления страницы, но позволяют использовать любой язык и использовать больше вычислительной мощности. Изменения на стороне клиента позволяют обновлять страницу небольшими порциями, что похоже на настольное приложение, но ограничено JavaScript и выполняется в браузере пользователя, который может иметь ограниченную вычислительную мощность. Обычно используется некоторая смесь этих двух вариантов. [16] Приложения, которые интенсивно используют JavaScript и обновляют только части страницы, называются одностраничными приложениями и обычно используют клиентскую веб-инфраструктуру JavaScript для организации кода. [ необходима цитата ]
Примерами являются Backbone.js , AngularJS , Angular , Ember.js , ReactJS , jQuery UI , Svelte и Vue.js. [17 ]
Фреймворки обычно устанавливают поток управления программой и позволяют пользователю фреймворка «подключаться» к этому потоку, выставляя различные события. [18] Этот шаблон проектирования « инверсии управления » считается определяющим принципом фреймворка и приносит пользу коду, обеспечивая общий поток для команды, который каждый может настраивать схожим образом. [18] Например, некоторые популярные «микрофреймворки», такие как Ruby Sinatra (который вдохновил Express.js ), допускают «промежуточные» хуки до и после HTTP-запросов. Эти функции промежуточного программного обеспечения могут быть любыми и позволяют пользователю определять ведение журнала, аутентификацию и управление сеансами, а также перенаправление. [19]
Веб-кэширование — это кэширование веб - документов с целью снижения использования полосы пропускания , нагрузки на сервер и воспринимаемой « задержки ». Веб-кэш хранит копии проходящих через него документов; последующие запросы могут быть удовлетворены из кэша при соблюдении определенных условий. Некоторые прикладные фреймворки предоставляют механизмы для кэширования документов и обхода различных этапов подготовки страницы, таких как доступ к базе данных или интерпретация шаблона. [ необходима цитата ]
Некоторые веб-фреймворки поставляются с фреймворками аутентификации и авторизации , которые позволяют веб-серверу идентифицировать пользователей приложения и ограничивать доступ к функциям на основе некоторых определенных критериев. Drupal — один из примеров, который обеспечивает доступ к страницам на основе ролей и предоставляет веб-интерфейс для создания пользователей и назначения им ролей. [ необходима цитата ]
Многие веб-фреймворки создают унифицированный API для бэкэнда базы данных, позволяя веб-приложениям работать с различными базами данных без изменения кода и позволяя программистам работать с концепциями более высокого уровня. Кроме того, некоторые объектно-ориентированные фреймворки содержат инструменты отображения для предоставления объектно-реляционного отображения , которое отображает объекты в кортежи . [20]
Некоторые фреймворки минимизируют конфигурацию веб-приложений за счет использования интроспекции и/или следования известным соглашениям. Например, многие фреймворки Java используют Hibernate в качестве слоя сохранения, который может генерировать схему базы данных во время выполнения, способную сохранять необходимую информацию. Это позволяет разработчику приложения проектировать бизнес-объекты без необходимости явно определять схему базы данных. Такие фреймворки, как Ruby on Rails, также могут работать в обратном направлении, то есть определять свойства объектов модели во время выполнения на основе схемы базы данных. [20]
Другие функции, которые могут предоставлять веб-фреймворки, включают поддержку транзакций [21] и инструменты миграции баз данных . [20]
URL- сопоставление или маршрутизация фреймворка — это механизм, с помощью которого фреймворк интерпретирует URL-адреса. Некоторые фреймворки, такие как Drupal и Django, сопоставляют предоставленный URL с предопределенными шаблонами, используя регулярные выражения , в то время как некоторые другие используют методы переписывания для перевода предоставленного URL в тот, который будет распознаваться базовым движком. Другой метод — это обход графа , например, используемый Zope , где URL-адрес разлагается на шаги, которые обходят граф объектов (моделей и представлений). [ необходима цитата ]
Система сопоставления URL-адресов, которая использует сопоставление с шаблоном или перезапись для маршрутизации и обработки запросов, позволяет использовать более короткие и « дружественные URL-адреса », что упрощает сайт и позволяет лучше индексировать его поисковыми системами. Например, URL-адрес, заканчивающийся на «/page.cgi?cat=science&topic=physics», можно изменить на просто «/page/science/physics». Это упрощает запоминание, чтение и запись URL-адреса и предоставляет поисковым системам более подробную информацию о структурной схеме сайта. Подход обхода графа также приводит к созданию дружественных URL-адресов. Более короткий URL-адрес, такой как «/page/science», как правило, существует по умолчанию, поскольку это просто более короткая форма более длинного обхода до «/page/science/physics». [ необходима цитата ]
Ajax , сокращение от « Асинхронный JavaScript и XML », — это метод веб-разработки для создания веб-приложений. Цель состоит в том, чтобы сделать веб-страницы более отзывчивыми, обмениваясь небольшими объемами данных с сервером за кулисами, так что вся веб-страница не должна перезагружаться каждый раз, когда пользователь запрашивает изменение. Это направлено на повышение интерактивности, скорости, удобства обслуживания и использования веб-страницы . [22]
Из-за сложности программирования Ajax в JavaScript существует множество фреймворков Ajax , которые занимаются исключительно поддержкой Ajax. Некоторые фреймворки Ajax даже встроены как часть более крупных фреймворков. Например, библиотека jQuery JavaScript включена в Ruby on Rails. [ необходима цитата ]
С ростом интереса к разработке " Web 2.0 " насыщенных веб-приложений сложность программирования непосредственно на Ajax и JavaScript стала настолько очевидной, что вмешалась технология компиляторов, чтобы позволить разработчикам писать код на языках высокого уровня, таких как Java, Python и Ruby. Первым из этих компиляторов был Morfik, за которым последовал Google Web Toolkit , с портами на Python и Ruby в форме Pyjs и RubyJS, появившимися некоторое время спустя. Эти компиляторы и связанные с ними библиотеки наборов виджетов делают разработку насыщенных медиа-приложений Ajax гораздо более похожей на разработку настольных приложений. [ необходима цитата ]
Некоторые фреймворки предоставляют инструменты для создания и предоставления веб-сервисов. Эти утилиты могут предлагать аналогичные инструменты, как и остальная часть веб-приложения. [23]
Ряд новых фреймворков Web 2.0 RESTful теперь предоставляют инфраструктуру архитектуры, ориентированной на ресурсы (ROA), для создания коллекций ресурсов в своего рода онтологии семантической паутины , основанной на концепциях из Resource Description Framework (RDF). [ необходима ссылка ]
Relational Mapping, обычно называемое аббревиатурой ORM, — это метод, который соединяет многофункциональные объекты приложения с таблицами в системе управления реляционными базами данных... Active Record автоматически создает методы, позволяющие приложению читать и обрабатывать данные, хранящиеся в его таблицах.