Фреймворк ( WF ) или фреймворк для веб - приложений ( WAF ) является программная среда , которая предназначена для поддержки разработки веб - приложений , в том числе веб - служб, веб - ресурсов и веб - API. Веб-фреймворки предоставляют стандартный способ создания и развертывания веб-приложений во всемирной паутине . Веб-фреймворки нацелены на автоматизацию накладных расходов, связанных с общими действиями, выполняемыми при веб-разработке . Например, многие веб-фреймворки предоставляют библиотеки для доступа к базам данных , фреймворки шаблонов иуправление сеансами , и они часто способствуют повторному использованию кода . [1] Хотя они часто нацелены на разработку динамических веб-сайтов , они также применимы к статическим веб-сайтам . [2]
История
Поскольку дизайн Всемирной паутины не был по своей природе динамичным, ранний гипертекст состоял из вручную закодированного HTML, который публиковался на веб-серверах . Любые модификации опубликованных страниц должны быть выполнены автором страниц. В 1993 году был представлен стандарт Common Gateway Interface (CGI) для взаимодействия внешних приложений с веб-серверами, чтобы обеспечить динамическую веб-страницу , отражающую вводимые пользователем данные. [3]
Однако оригинальные реализации интерфейса CGI обычно отрицательно сказывались на нагрузке на сервер, поскольку каждый запрос запускал отдельный процесс . [4] Более поздние реализации используют постоянные процессы среди других методов, чтобы уменьшить занимаемое сервером место в ресурсах и предложить общий прирост производительности.
В 1995 году впервые появились полностью интегрированные серверные / языковые среды разработки и были представлены новые веб-языки, такие как ColdFusion , PHP и Active Server Pages . [ необходима цитата ]
Хотя подавляющее большинство языков для создания динамических веб-страниц имеют библиотеки, помогающие с общими задачами, веб-приложениям часто требуются специальные библиотеки для конкретных задач, таких как создание HTML (например, JavaServer Faces ). [ необходима цитата ]
В конце 1990-х начали появляться зрелые, «полные» фреймворки, которые часто собирали несколько библиотек, полезных для веб-разработки, в единый сплоченный программный стек для использования веб-разработчиками. Примеры этого включают ASP.NET , Java EE , WebObjects , web2py , OpenACS , Catalyst , Mojolicious , Ruby on Rails , Laravel , Grails , Django , Zend Framework , Sails.js , Yii , [5] CakePHP , [6] и Symfony. . [ необходима цитата ]
Типы архитектур фреймворков
Большинство веб-фреймворков основано на шаблоне модель – представление – контроллер (MVC) . [ необходима цитата ]
Модель – представление – контроллер (MVC)
Многие фреймворки следуют архитектурному шаблону MVC, чтобы отделить модель данных с бизнес-правилами от пользовательского интерфейса . Обычно это считается хорошей практикой, так как он разбивает код на модули, способствует повторному использованию кода и позволяет применять несколько интерфейсов. В веб-приложениях это позволяет представлять различные представления, такие как веб-страницы для людей и интерфейсы веб-служб для удаленных приложений. [ необходима цитата ]
На основе выталкивания и на основе вытягивания
Большинство фреймворков MVC следуют архитектуре на основе push, также называемой «основанной на действиях». Эти платформы используют действия, которые выполняют необходимую обработку, а затем «проталкивают» данные на уровень представления для визуализации результатов. [7] Django , Ruby on Rails , Symfony , Spring MVC , Stripes , Sails.js , CodeIgniter [8] - хорошие примеры этой архитектуры. Альтернативой этому является архитектура на основе вытягивания, иногда также называемая «компонентной». Эти структуры начинаются с уровня представления, который затем может «извлекать» результаты из нескольких контроллеров по мере необходимости. В этой архитектуре несколько контроллеров могут быть задействованы в одном представлении. Lift , Tapestry , JBoss Seam , JavaServer Faces и Wicket являются примерами архитектур на основе pull. Play , Struts , RIFE и ZK поддерживают вызовы контроллеров приложений на основе push и pull. [ необходима цитата ]
Трехуровневая организация
В трехуровневой организации приложения структурированы вокруг трех физических уровней: клиент, приложение и база данных. [9] [10] [11] [12] База данных обычно представляет собой СУБД . Приложение содержит бизнес-логику, работает на сервере и взаимодействует с клиентом по протоколу HTTP . [13] Клиент веб-приложений - это веб-браузер, который запускает HTML, созданный на уровне приложения. [14] [15] Этот термин не следует путать с MVC, где, в отличие от трехуровневой архитектуры, считается хорошей практикой держать бизнес-логику подальше от контроллера, «среднего уровня». [16] [17]
Рамочные приложения
Фреймворки созданы для поддержки создания интернет-приложений на основе единого языка программирования, начиная от инструментов общего назначения, таких как Zend Framework и Ruby on Rails, которые расширяют возможности конкретного языка, до программируемых пакетов на собственном языке, построенных вокруг конкретное пользовательское приложение, такое как системы управления контентом , некоторые инструменты мобильной разработки и некоторые инструменты портала. [18]
Фреймворки для веб-сайтов общего назначения
Веб-фреймворки должны функционировать в соответствии с архитектурными правилами браузеров и протоколов, таких как HTTP , который не имеет состояния . Веб-страницы обслуживаются сервером, а затем могут быть изменены браузером с помощью JavaScript . У любого подхода есть свои преимущества и недостатки. [ необходима цитата ]
Изменения страницы на стороне сервера обычно требуют обновления страницы, но позволяют использовать любой язык и использовать больше вычислительной мощности. Изменения на стороне клиента позволяют обновлять страницу небольшими порциями, которые выглядят как настольное приложение, но ограничены JavaScript и запускаются в браузере пользователя, что может иметь ограниченную вычислительную мощность. Обычно используется какое-то их сочетание. [19] Приложения, интенсивно использующие JavaScript, называются одностраничными приложениями и обычно используют клиентскую веб-платформу JavaScript для организации кода. [ необходима цитата ]
На стороне сервера
- Apache Wicket
- ASP.NET Core
- CakePHP
- Катализатор
- CodeIgniter
- CppCMS
- Джанго
- Колба
- Jam.py
- Yii
- Laravel
- Mojolicious
- Рубин на рельсах
- Sails.js
- Symfony
- Spring MVC
- Wt (веб-инструментарий)
- Zend Framework [20]
Сторона клиента
Примеры включают Backbone.js , AngularJS , угловые , EmberJS , ReactJS и Vue.js . [21]
Dash - это платформа Python , R и Julia с открытым исходным кодом для создания аналитических веб- приложений . Тот же JavaScript (т.е. React) используется на стороне клиента, независимо от внутреннего языка.
Дискуссионные форумы, вики и блоги
- WikiBase / WikiWikiWeb [ необходима ссылка ]
Функции
Фреймворки обычно задают поток управления программой и позволяют пользователю фреймворка «подключиться» к этому потоку, открывая различные события. [22] Этот шаблон проектирования « инверсия управления » считается определяющим принципом фреймворка и приносит пользу коду, обеспечивая общий поток для команды, который каждый может настраивать аналогичным образом. [22] Например, некоторые популярные «микрофреймворки», такие как Ruby Sinatra (вдохновившая Express.js ), допускают перехватчики «промежуточного программного обеспечения» до и после HTTP-запросов. Эти функции промежуточного программного обеспечения могут быть любыми и позволяют пользователю определять ведение журнала, аутентификацию и управление сеансом, а также перенаправление. [23]
Система веб-шаблонов
Кеширование
Веб - кэширование является кэширование на веб - документов в целях уменьшения пропускной способности использования, сервер нагрузки , и воспринимается « отставание ». В веб-кеше хранятся копии документов, проходящих через него; последующие запросы могут быть удовлетворены из кэша, если выполняются определенные условия. Некоторые платформы приложений предоставляют механизмы для кэширования документов и обхода различных этапов подготовки страницы, таких как доступ к базе данных или интерпретация шаблона. [ необходима цитата ]
Безопасность
Некоторые веб-фреймворки поставляются с фреймворками аутентификации и авторизации , которые позволяют веб-серверу идентифицировать пользователей приложения и ограничивать доступ к функциям на основе определенных критериев. Drupal - один из примеров, который обеспечивает доступ к страницам на основе ролей и предоставляет веб-интерфейс для создания пользователей и назначения им ролей. [ необходима цитата ]
Доступ к базе данных, отображение и настройка
Многие веб-фреймворки создают унифицированный API для серверной части базы данных, позволяя веб-приложениям работать с различными базами данных без изменения кода и позволяя программистам работать с концепциями более высокого уровня. Кроме того, некоторые объектно-ориентированные структуры содержат средства отображения для обеспечения объектно-реляционные отображения , которая отображает объекты для кортежей . [24]
Некоторые фреймворки минимизируют конфигурацию веб-приложений за счет использования интроспекции и / или следования известным соглашениям. Например, многие инфраструктуры Java используют Hibernate в качестве уровня сохраняемости, который может генерировать схему базы данных во время выполнения, способную сохранять необходимую информацию. Это позволяет разработчику приложения разрабатывать бизнес-объекты без необходимости явно определять схему базы данных. Такие фреймворки, как Ruby on Rails, также могут работать в обратном направлении, то есть определять свойства объектов модели во время выполнения на основе схемы базы данных. [24]
Другие функции, которые могут предоставить веб-фреймворки, включают поддержку транзакций [25] и инструменты миграции базы данных . [24]
Сопоставление URL
Средство сопоставления 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
Ajax , сокращение от « Асинхронный JavaScript и XML », представляет собой метод веб-разработки для создания веб-приложений. Цель состоит в том, чтобы сделать веб-страницы более отзывчивыми, обмениваясь небольшими объемами данных с сервером за кулисами, чтобы не перезагружать всю веб-страницу каждый раз, когда пользователь запрашивает изменение. Это предназначено для повышения интерактивности, скорости и удобства использования веб-страницы . [26]
Из-за сложности программирования 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-приложений более похожей на разработку настольных приложений. [ необходима цитата ]
Веб-сервисы
Некоторые платформы предоставляют инструменты для создания и предоставления веб-сервисов. Эти утилиты могут предлагать те же инструменты, что и остальная часть веб-приложения. [27]
Интернет-ресурсы
Ряд более новых RESTful- фреймворков Web 2.0 теперь предоставляют инфраструктуру ресурсо-ориентированной архитектуры (ROA) для создания коллекций ресурсов в своего рода онтологии семантической паутины , основанной на концепциях из Resource Description Framework (RDF). [ необходима цитата ]
Смотрите также
- Сравнение веб-фреймворков
- Богатое веб-приложение
- Список полнофункциональных фреймворков веб-приложений
- Список фреймворков веб-сервисов
- Сервер приложений
- Сравнение серверов приложений
- Фреймворк приложения
- Безопасность приложений
- Соглашение важнее конфигурации
- Не повторяйся (СУХОЙ)
- Стек решений
- Фреймворк для веб-приложений для нескольких телефонов
Рекомендации
- ^ Несколько (вики). «Фреймворк веб-приложений» . Докфорж . Архивировано из оригинала на 2015-07-23.
- ^ «Лучшие генераторы статических сайтов с открытым исходным кодом» . StaticGen .
- ^ «CGI: Общий интерфейс шлюза» . Архивировано из оригинала на 2009-04-09.
- ^ "CGI" . www.ibm.com . Проверено 7 мая 2021 .
- ^ «Yii PHP Framework» .
- ^ «CakePHP» .
- ^ Томсон, Крис (2003-10-29). «Разъяснение по MVC = Pull и MVC Push» . Проверено 29 июля 2007 .
- ^ «В чем принципиальные различия между Struts и JSF» . Struts.apache.org. 2011-02-14 . Проверено 14 июня 2013 .
- ^ Microsoft. «Трехуровневая раздача» . Проверено 19 сентября 2011 .
- ^ Oracle. "clustering_concepts_10en" (PDF) . Проверено 19 сентября 2011 .
- ^ Роберт Р. Перкоски. «Введение в веб-разработку» . Архивировано из оригинала на 2013-11-07.
- ^ IBM. «Использование Client Access Express в трехуровневой среде» . Проверено 19 сентября 2011 .
- ^ Oracle. «Понимание трехуровневой архитектуры» . Проверено 19 сентября 2011 .
- ^ Microsoft. «Прагматическая архитектура: наслоение» . Проверено 19 сентября 2011 .
- ^ Арокия. «Трехуровневая веб-архитектура» . Проверено 19 сентября 2011 .
- ^ «Лучшие практики контроллера ASP.NET MVC» . Архивировано из оригинала на 2011-10-11 . Проверено 19 сентября 2011 .
- ^ Джеймис Бак. «Тощий контролер, толстая модель» . Архивировано из оригинала на 2015-05-16.
- ^ «Начало работы с веб-фреймворками» . Проводной журнал . Проверено 2 апреля 2018 .
- ^ КЛИМУШИН, Мел. «Архитектура веб-приложений - на стороне клиента или на стороне сервера» . Атомный спин . Проверено 6 марта 2016 .
- ^ «Главная - Zend Framework» . framework.zend.com . Проверено 9 февраля 2020 .
- ^ «AngularJS против Backbone.js против Ember.js» . www.airpair.com . Проверено 4 июня 2016 .
- ^ а б Фаулер, Мартин. «блики: InversionOfControl» . martinfowler.com . Проверено 6 марта 2016 .
- ^ Сюэ, Цян. «Capital One Engineering - философии, которые сформировали успешные рамки» . www.capitalone.io . Проверено 6 марта 2016 .
- ^ а б в «Основы Active Record» . Рубин на рельсах . Проверено 20 марта 2021 года .
Объектно-реляционное сопоставление, обычно называемое аббревиатурой ORM, представляет собой метод, который связывает богатые объекты приложения с таблицами в системе управления реляционными базами данных ... Active Record автоматически создает методы, позволяющие приложению читать и управлять данными, хранящимися в нем. свои таблицы.
- ^ «Операции с активной записью» . Рубин на рельсах . Проверено 20 марта 2021 года .
- ^ «Что такое AJAX» . www.dlsweb.rmit.edu.au . Проверено 7 мая 2021 .
- ^ Максимилиан, EM (19 декабря 2006 г.). «Веб-сервисы на Rails: использование Ruby и Rails для разработки веб-сервисов и гибридных приложений» . IEEE Xplore . Чикаго. DOI : 10.1109 / ICWS.2006.139 . ISBN 0-7695-2669-1.