Веб -фреймворк ( WF ) или фреймворк веб-приложений ( WAF ) — это программная платформа , предназначенная для поддержки разработки веб-приложений , включая веб-сервисы, веб-ресурсы и веб-API . Веб-фреймворки предоставляют стандартный способ создания и развертывания веб-приложений во Всемирной паутине . Веб-фреймворки призваны автоматизировать накладные расходы, связанные с обычными действиями, выполняемыми при веб-разработке . Например, многие веб-платформы предоставляют библиотеки для доступа к базам данных , платформы шаблонов и управления сеансами , а также часто способствуют повторному использованию кода . [1] Хотя они часто предназначены для разработки динамических веб-сайтов , они также применимы и к статическим веб-сайтам . [2]
Поскольку дизайн Всемирной паутины по своей сути не был динамичным, ранний гипертекст состоял из текстовых файлов HTML , написанных вручную и публикуемых на веб-серверах . Любые изменения опубликованных страниц должны вноситься автором страниц. В 1993 году был представлен стандарт Common Gateway Interface (CGI) для взаимодействия внешних приложений с веб-серверами, чтобы обеспечить динамическую веб-страницу , отражающую вводимые пользователем данные. [3]
Однако оригинальные реализации интерфейса CGI обычно отрицательно влияли на загрузку сервера, поскольку каждый запрос запускал отдельный процесс . [4] В более поздних реализациях среди других методов используются постоянные процессы, чтобы уменьшить использование ресурсов сервера и обеспечить общее повышение производительности. [ нужна цитата ]
В 1995 году впервые появились полностью интегрированные серверные/языковые среды разработки, а также были представлены новые веб-языки, такие как ColdFusion , PHP и Active Server Pages . [ нужна цитата ]
Хотя подавляющее большинство языков для создания динамических веб-страниц имеют библиотеки , помогающие решать общие задачи, веб-приложениям часто требуются специальные библиотеки для конкретных задач, таких как создание HTML (например, Jakarta Server Faces ). [ нужна цитата ]
В конце 1990-х годов начали появляться зрелые, «полнофункциональные» фреймворки, которые часто объединяли несколько библиотек, полезных для веб-разработки, в единый связный программный стек , который могли использовать веб-разработчики. [ нужна цитата ]
Большинство веб-фреймворков основаны на шаблоне модель-представление-контроллер (MVC) . [ нужна цитата ]
Многие платформы следуют архитектурному шаблону MVC , разделяя модель данных на бизнес-правила («контроллер») и пользовательский интерфейс («представление»). Обычно это считается хорошей практикой, поскольку она модульизирует код , способствует повторному использованию кода и позволяет применять несколько интерфейсов. В веб-приложениях это позволяет представлять разные представления, например, обслуживать разные веб-страницы для мобильных и настольных браузеров или предоставлять машиночитаемые интерфейсы веб-служб .
Большинство фреймворков MVC следуют архитектуре, основанной на push-уведомлениях, также называемой «основанной на действиях». Эти платформы используют действия, которые выполняют необходимую обработку, а затем «переносят» данные на уровень представления для визуализации результатов. [5] Альтернативой этому является архитектура на основе извлечения, которую иногда также называют «компонентной». Эти платформы начинаются со слоя представления, который затем может «извлекать» результаты из нескольких контроллеров по мере необходимости. В этой архитектуре несколько контроллеров могут быть задействованы в одном представлении.
В трехуровневой организации приложения структурированы вокруг трех физических уровней: клиента, приложения и базы данных. [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=physical», можно изменить на просто «/page/science/physical». Это облегчает людям запоминание, чтение и запись URL-адреса, а также предоставляет поисковым системам лучшую информацию о структурной структуре сайта. Подход с обходом графа также имеет тенденцию приводить к созданию дружественных URL-адресов. Более короткий URL-адрес, например «/page/science», как правило, существует по умолчанию, поскольку это просто более короткая форма более длинного перехода к «/page/science/physical». [ нужна цитата ]
Ajax , сокращение от « Асинхронный JavaScript и XML », представляет собой метод веб-разработки для создания веб-приложений. Цель состоит в том, чтобы сделать веб-страницы более отзывчивыми за счет незаметного обмена небольшими объемами данных с сервером, чтобы не приходилось перезагружать всю веб-страницу каждый раз, когда пользователь запрашивает изменение. Это предназначено для повышения интерактивности, скорости, удобства обслуживания и использования веб-страницы . [22]
Из-за сложности Ajax-программирования на JavaScript существует множество Ajax-фреймворков , которые поддерживают исключительно Ajax. Некоторые фреймворки Ajax даже встроены в более крупные фреймворки. Например, библиотека jQuery JavaScript включена в Ruby on Rails. [ нужна цитата ]
С возросшим интересом к разработке насыщенных веб-приложений « Web 2.0 » сложность программирования непосредственно на Ajax и JavaScript стала настолько очевидной, что в дело вмешалась технология компиляции, позволяющая разработчикам писать код на языках высокого уровня, таких как Java, Python и Рубин. Первым из этих компиляторов был Morfik , за которым последовал Google Web Toolkit , а через некоторое время последовали порты на Python и Ruby в форме Pyjs и RubyJS. Эти компиляторы и связанные с ними библиотеки наборов виджетов делают разработку мультимедийных приложений Ajax гораздо более похожей на разработку настольных приложений. [ нужна цитата ]
Некоторые платформы предоставляют инструменты для создания и предоставления веб-сервисов. Эти утилиты могут предлагать те же инструменты, что и остальная часть веб-приложения. [23]
Ряд новых инфраструктур RESTful Web 2.0 теперь предоставляют инфраструктуру ресурсно-ориентированной архитектуры (ROA) для создания коллекций ресурсов в своего рода онтологии семантической сети , основанной на концепциях Resource Description Framework (RDF). [ нужна цитата ]
Реляционное сопоставление объектов, обычно называемое аббревиатурой ORM, представляет собой метод, который соединяет богатые объекты приложения с таблицами в системе управления реляционной базой данных... Active Record автоматически создает методы, позволяющие приложению читать и манипулировать данными, хранящимися в нем. свои таблицы.