Для формирования ответа бэкенд может обращаться к базе данных за нужной информацией для наполнения шаблона страницы.
Web-приложения с использованием AJAX.
При первом запросе к странице передается HTML-код каркаса. Код JavaScript асинхронно подгружает остальные фрагменты страницы и может «на лету» отправлять запросы на сервер и обрабатывать его ответы в формате XML (eXtended Markup Language) или JSON (JavaScript Object Notation). Эта технология называется «асинхронный JavaScript и XML» (Asynchronous JavaScript And XML, AJAX).
Клиентские приложения.
Вся нагрузка возложена на клиентскую сторону. Сервер только доставляет HTML-код со ссылками на стили и сценарии JavaScript, а эти сценарии обеспечивают логику, отображение и подгружают нужный контент.
Все взаимодействие с пользователем происходит на одной странице, поэтому такие приложения называют одностраничными (single page applications, SPA). Пользователь выполняет некоторые действия, отправляет запрос и получает ответ без перезагрузки страницы.
Для создания одностраничных web-приложений используются такие фреймворки, как, например, Ember.js, Angular, React, Backbone.js и Vue.js.
Прогрессивные web-приложения.
Прогрессивные web-приложения (англ. progressive web application, PWA) — это web-приложения, разработанные с помощью определенных специальных технологий и стандартных шаблонов, что позволяет им пользоваться преимуществами десктопных и web-приложений.
Прогрессивные web-приложения могут хранить данные на стороне клиента, поэтому ими можно пользоваться без подключения к интернету и работа с данными ведется быстрее.
Они обладают следующими характеристиками:
-
доступность для поиска: контент можно найти через поисковики;
-
возможность установки: приложения доступны с домашнего экрана устройства или в средстве запуска приложений;
-
возможность создания ссылок: можно передать ссылку на прогрессивное web-приложение другому пользователю;
-
независимость от сети: работают без подключения к интернету или при слабом подключении;
-
прогрессивное усовершенствование: доступны на базовом уровне в старых браузерах, а полный функционал доступен в новых браузерах;
-
повторное привлечение: когда доступен новый контент, приложение может отправлять уведомления;
-
адаптивный дизайн: доступны на любых устройствах с экраном и браузером, в том числе на мобильном телефонах, планшетах, ноутбуках, телевизорах, холодильниках и т.п.;
-
безопасность: соединение между пользователем, приложением и сервером защищено, и третьи стороны не могут получить доступ к конфиденциальным данным.
Принципы работы web-приложений.
Web-приложения состоят из серверной части (back-end, бэкенд) и клиентской части (front-end, фронтенд). Пользователи взаимодействуют с клиентской частью через интерфейс, который отображается в браузере (Chrome, Firefox, Safari, Edge и др.). По команде пользователя запрос отправляется на сервер через интернет. На сервере его обрабатывает серверный код и возвращает клиенту ответ, данный фрагмент представлен на рисунке 12.
Рисунок 13 – Возвращение клиенту ответаВ ответе может содержаться как готовая HTML-страница, так и шаблон страницы или данные, например, в формате XML или JSON. Это зависит от выбранного типа рендеринга (формирования) страницы. То есть, страница может отправляться вообще без изменений (статическая страница) или же бэкенд вносит в нее изменения, после чего отправляет ее браузеру (динамическая страница). Рендеринг может производиться либо полностью на сервере, либо в разных соотношениях распределяться между сервером и клиентом, либо выполняться только клиентом.
Статические и динамические страницы.
Страницы первых web-сайтов содержали только текст в формате HTML. Со временем добавились изображения и таблицы, но web-страницы оставались статическими в прямом смысле слова. Со временем появились технологии, которые позволили придать им динамику. Эту эволюцию мы рассмотрим подробнее в следующих подразделах.
Обработка статических web-страниц.
Клиент отправляет серверу навигационный запрос. В ответ на этот запрос сервер передает клиенту статическую web-страницу без изменений. Весь ее контент (текст, изображения и т.д.) каждый раз выводится одинаково. Этот контент «жестко» закодирован в самой странице.
Обработка динамических страниц.
Бэкенд.
В 1993 году появилась спецификация Common Gateway Interface (CGI). Это интерфейс, который используется программой для связи с web-сервером. Такая программа называется шлюзом. Шлюз может быть написан на любом языке программирования, который использует стандартный ввод-вывод: C/C++, Fortran, PERL, TCL, любая оболочка Unix (shell), Visual Basic, AppleScript. На практике большинство сценариев было написано на Perl.
Эти сценарии позволяли использовать один и тот же шаблон, чтобы наполнять его разным контентом. Таким образом, страницы стали динамически генерироваться на сервере в тексте сценария. В то же время, с точки зрения отклика на действия пользователя в режиме реального времени страницы оставались статическими.
В 1995 году с возникновением JavaScript появилась возможность реагировать на действия пользователя мгновенно и открывать всплывающие окна. Web-страницы оживились. В этом же году был создан язык PHP. Он позволял объединять HTML-код с логикой.
Выгода — не приходится создавать каждую страницу отдельно. Один и тот же код выполняет рендеринг любой страницы. Такой рендеринг называется серверным рендерингом (server-side rendering, SSR). Сервер обрабатывает запрос, формирует страницу из шаблона, а клиент получает готовую полнофункциональную HTML-страницу.
Сейчас для написания кода бэкенда используется множество языков и специальных фреймворков. Самые популярные — это Java (с использованием Java Servlet API), PHP + Laravel, Python + Django, Node.js, языки платформы .NET (C#, VB) + ASP.NET, Ruby + Ruby on Rails и Go. Выбор конкретного языка и фреймворка зависит от характера решаемых задач.
Доступ к базе данных.
Список продуктов с информацией о них может храниться в базе данных (БД). С ней взаимодействует серверный код. Он может читать данные из базы, добавлять, изменять или удалять их. В качестве системы управления базой данных используются MySQL, PostgreSQL, Memcached, MongoDB, Redis и другие. Для работы с БД существует множество библиотек, ориентированных на различные серверные языки программирования.
Фронтенд.
Интерфейс web-приложения может передаваться браузеру не только в виде целой HTML-страницы. Например, в одностраничном приложении это каркас: мета-теги, ссылки на стили и на сценарии, а также элементы, в которые сценарий подставляет нужный контент.
Окончательный вид приложение приобретает после загрузки всего контента и задействования всех стилей. Но и после этого некоторые меню и списки формируются динамически при нажатии соответствующих кнопок, а некоторые обновляются в режиме реального времени. Например, комментарий к публикации можно отправить, не покидая страницу, и он отобразится, как только будет установлено, что он успешно добавлен в хранилище.
Фронтенд может содержать информационные блоки и элементы управления. Например, в Facebook информационные блоки — это публикации в ленте, истории, рекомендации, а элементы управления — кнопки вкладок.
Основные инструменты для web-разработки:
-
библиотеки JavaScript;
-
инструменты web-разработки – интерфейсные среды (Front end Frameworks);
-
фреймворки web-приложений;
-
языки / платформы;
-
базы данных;
-
CSS препроцессоры;
-
web-серверы;
-
локальные сервера – Dev среда разработки.
Библиотеки JavaScript.
Javascript – один из самых популярных языков программирования в сети. Библиотека Javascript – это предварительно написанный скрипт на Javascript, который предоставляет более легкий доступ на всех этапах разработки web-cайта или приложения.
Библиотеки JavaScript:
-
jQuery: быстрая, маленькая и многофункциональная библиотека JavaScript.
-
BackBoneJS: Дает JS-приложению коннект с моделями, представлениями, коллекциями и событиями.
-
D3.js: библиотека JavaScript для управления документами на основе данных.
-
React: библиотека Javascript Facebook, разработанная для создания пользовательских интерфейсов.
-
Пользовательский интерфейс jQuery: Набор взаимодействий, эффектов, виджетов и тем пользовательского интерфейса.
-
jQuery Mobile: система пользовательского интерфейса на основе HTML5, предназначенная для создания адаптивных web-сайтов.
-
Underscore.js: помощники по функциональному программированию без расширения каких-либо встроенных объектов.
-
Moment.js: помогают анализировать, проверять, манипулировать и отображать даты в JavaScript.
-
Lodash: современная библиотека утилит, обеспечивающая модульность, производительность и дополнительные возможности.
-
Vue.js: среда JavaScript с открытым исходным кодом, используемая для создания пользовательских интерфейсов.
Инструменты web-разработки – интерфейсные среды (Front end Frameworks).
Предназначены для фронтенд разработки и обычно состоят из пакета, состоящего из других файлов и папок, таких как HTML, CSS, JavasScript и т.д. Существует также множество автономных фреймворков. Надежная структура таких пакетов может быть важным инструментом для разработчиков фронтенда.
-
Bootstrap: HTML, CSS и JS-фреймворк для разработки адаптивных мобильных проектов в Интернете.
-
Foundation: семейство адаптивных интерфейсных сред, которые позволяют легко создавать красивые адаптивные web-сайты, приложения и электронные письма, которые выглядят потрясающе на любом устройстве.
-
Semantic UI ("Семантический пользовательский интерфейс"): среда разработки, которая помогает создавать красивые адаптивные макеты с использованием удобного HTML.
-
Uikit: легкий и модульный интерфейс для разработки быстрых и мощных web-интерфейсов.
Фреймворки web-приложений.
Фреймворки web-приложений – это программный каркас, предназначенный для помощи и снятия головной боли при разработке web-приложений и сервисов.
-
Ruby: Ruby on Rails – это инфраструктура web-приложений, которая включает в себя все необходимое для создания web-приложений на основе базы данных с шаблоном MVC.
-
AngularJS: позволяет расширить словарный запас HTML для web-приложения. AngularJS – это фреймворк, хотя он гораздо более легкий и иногда называется библиотекой.
-
Ember.js: платформа для создания амбициозных web-приложений.
-
Express: быстрый и минималистичный web-фреймворк для Node.js.
-
Meteor: полнофункциональная платформа приложений JavaScript, которая собирает все части, необходимые для создания современных web-приложений и мобильных приложений, с единой базой кода JavaScript.
-
Django: web-инфраструктура Python высокого уровня, которая способствует быстрой разработке и чистому, прагматичному дизайну.
-
ASP.net: бесплатная полностью поддерживаемая платформа web-приложений, которая помогает создавать web-решения на основе самых современных web-стандартов.
-
Laravel: бесплатный фреймворк для web-приложений с открытым исходным кодом для создания web-приложений по шаблону MVC.
-
Zend Framework 2: платформа с открытым исходным кодом для разработки web-приложений и сервисов с использованием PHP.
-
Phalcon: полнофункциональный PHP-фреймворк, поставляемый как C-расширение.
-
Symfony: набор PHP-компонентов и каркас web-приложения.
-
CakePHP: популярная среда PHP, которая делает создание web-приложений проще, быстрее и требует меньше кода.
-
Flask: микрофрейм для Python, основанный на Werkzeug и Jinja 2.
-
CodeIgniter: мощный и легкий PHP-фреймворк, созданный для разработчиков, которым необходим простой и элегантный инструментарий для создания полнофункциональных web-приложений.
Языки / Платформы.
За всеми инструментами web
-разработки стоит язык. Язык программирования
является формальным языком, предназначенным для построения связи с компьютером чтобы программист мог удобно и максимально быстро создавать программы. -
PHP: популярный язык сценариев общего назначения, который особенно подходит для web-разработки.
-
NodeJS: управляемая событиями среда ввода-вывода на стороне сервера JavaScript, основанная на V8.
-
Javascript: язык программирования HTML и web.
-
HTML5: язык разметки, последняя версия HTML и XHTML.
-
Python: язык программирования, который позволяет работать быстрее и более эффективно интегрировать системы.
-
Ruby: динамический язык программирования с открытым исходным кодом и с упором на простоту и производительность.
-
Scala: чистый объектно-ориентированный язык, позволяющий постепенно и легко перейти к более функциональному стилю.
-
CSS3: последняя версия каскадных таблиц стилей, используемых при фронтальной разработке сайтов и приложений.
-
SQ: язык структурированных запросов, используемый с реляционными базами данных.
-
Golang: язык программирования с открытым исходным кодом, позволяющий легко создавать простые, надежные и эффективные программы.
-
Rust: язык системного программирования, который работает невероятно быстро, предотвращает ошибки и гарантирует безопасность потоков.
-
Elixir: динамический, функциональный язык, предназначенный для создания масштабируемых и поддерживаемых приложений.
-
TypeScript: язык программирования с открытым исходным кодом, представляющий собой расширенный набор JavaScript, который компилируется в простой JavaScript.