031.2 Урок 1
Сертифікат: |
Основи веброзробки |
---|---|
Версія: |
1.0 |
Розділ: |
031 Розробка програмного забезпечення та вебтехнології |
Тема: |
031.2 Архітектура вебзастосунків |
Урок: |
1 з 1 |
Вступ
Слово застосунок (application) має широке значення в технологічному жаргоні. Коли застосунок є традиційною програмою, що виконується локально і є самодостатньою за своїм призначенням, операційний інтерфейс програми та компоненти обробки даних інтегровані в єдиний “пакунок”. Вебзастосунок відрізняється тим, що він реалізовує модель клієнт/сервер, його клієнтська частина базується на HTML, який отримується із сервера і, як правило, відтворюється браузером.
Клієнти та сервери
У моделі клієнт/сервер частина роботи виконується локально на стороні клієнта, а частина роботи виконується віддалено, на серверній стороні. Завдання, які виконує кожна сторона, залежать від мети застосунку, але, як правило, клієнт повинен надати користувачеві інтерфейс і надати вміст у привабливому вигляді. Сервер має виконувати бізнес-логіку програми, обробляючи та відповідаючи на запити клієнта. Наприклад, у застосунку онлайн-покупок, клієнтська програма відображає інтерфейс користувача для вибору та оплати продуктів, але джерело даних і записи транзакцій зберігаються на віддаленому сервері, доступ до якого здійснюється через мережу. Вебпрограми реалізують цей зв’язок через Інтернет, як правило, через протокол передачі гіпертексту (HTTP, Hypertext Transfer Protocol).
Після завантаження браузером клієнтська сторона застосунку ініціює взаємодію із сервером, коли це необхідно або зручно. Сервери вебзастосунків пропонують інтерфейс прикладного програмування (API), який визначає доступні запити та спосіб їх виконання. Таким чином, клієнт створює запит у форматі, визначеному API, і відправляє його на сервер, який перевіряє наявність будь-яких передумов для запиту і надсилає зворотно релевантну відповідь.
Тоді як клієнт у вигляді мобільного застосунку або браузера для настільного комп’ютера є автономною програмою щодо інтерфейсу користувача та інструкцій щодо зв’язку із сервером, браузер повинен отримати HTML-сторінку та пов’язані компоненти, наприклад зображення, CSS і JavaScript, які визначають інтерфейс та інструкції для зв’язку із сервером.
Мови програмування та платформи, які використовуються клієнтом і сервером, є незалежними, але використовують взаємно зрозумілий протокол спілкування. Серверна частина майже завжди виконується програмою без графічного інтерфейсу, яка працює у високодоступних обчислювальних середовищах, тому вона завжди готова відповісти на запити. На відміну від цього, клієнтська частина працює на будь-якому пристрої, який здатний відтворювати інтерфейс HTML, наприклад на смартфонах.
Крім важливості для певних цілей, прийняття моделі клієнт/сервер дає змогу застосунку оптимізувати декілька аспектів розробки та підтримки, оскільки кожна частина може бути розроблена для певної мети. Наприклад, застосунок, який відображає карти та маршрути, не вимагає, щоб усі карти зберігалися локально. Потрібні лише карти, що стосуються розташування, яке цікавить користувача, тому лише ці карти запитуються із центрального сервера.
Розробники мають прямий контроль над сервером, тому вони також можуть змінювати клієнта, який надається сервером. Це дає змогу розробникам удосконалювати застосунок більшою чи меншою мірою, без необхідності явного встановлення нових версій.
Клієнтська сторона
Вебзастосунок має працювати однаково в будь-якому з найпопулярніших браузерів, якщо браузер оновлений. Деякі браузери можуть бути несумісними з останніми інноваціями, але лише експериментальні застосунки використовують функції, які ще не отримали поширення.
Проблеми з несумісністю були більш поширеними в минулому, коли різні браузери мали свій власний механізм візуалізації і було менше співпраці у формулюванні та прийнятті стандартів. Механізм візуалізації є основним компонентом браузера, оскільки відповідає за перетворення HTML та інших пов’язаних компонентів у візуальні та інтерактивні елементи інтерфейсу. Деякі браузери, зокрема Internet Explorer, потребували спеціальної обробки в коді, щоб не порушити очікувану поведінку сторінок.
Сьогодні основні браузери мають мінімальні відмінності, а несумісність трапляється рідко. Насправді браузери Chrome і Edge використовують один і той самий двигун візуалізації (званий Blink). Браузер Safari та інші браузери, які пропонуються в iOS App Store, використовують двигун WebKit. Firefox використовує двигун Gecko. Ці три двигуни покривають практично всі браузери, які використовуються сьогодні. Хоча ці три двигуни розроблені окремо, вони є проєктами з відкритим кодом, і між їх розробниками існує співпраця, яка полегшує сумісність, підтримку та прийняття стандартів.
Оскільки розробники браузерів доклали багато зусиль, щоб зберегти сумісність, сервер зазвичай не прив’язаний до одного типу клієнта. Зазвичай, HTTP-сервер може спілкуватися з будь-яким клієнтом, який також здатний спілкуватися через HTTP. У картографічному сервісі, наприклад, клієнтом може бути мобільний застосунок або браузер, який завантажує HTML-інтерфейс із сервера.
Різноманітність вебклієнтів
Існують мобільні застосунки та програми для настільних ПК, інтерфейс яких відтворюється з HTML і, на зразок браузерів, можуть використовувати JavaScript як мову програмування. Однак на відміну від клієнта, завантаженого в браузері, HTML і необхідні компоненти для роботи нативного (рідного) клієнта присутні локально з моменту встановлення програми. Насправді, застосунок, який працює таким чином, є практично ідентичним HTML-сторінці (обидва, швидше за все, будуть відтворені одним і тим самим двигуном). Існують також прогресівні вебзастосунки (PWA, Progressive Web Apps), механізм, який дає змогу упаковувати клієнта вебзастосунка для використання в автономному режимі, обмежені функціями, які не вимагають негайного зв’язку із сервером. Щодо можливостей застосунку, то немає різниці між запуском у браузері чи запакованим у PWA, за винятком того, що в останньому варіанті розробник має більше контролю над тим, що зберігається локально.
Відтворення інтерфейсів із HTML є такою періодичною діяльністю, що двигун зазвичай є окремим програмним компонентом, присутнім в операційній системі. Його наявність як окремого компонента дає змогу різним програмам включати його без необхідності вбудовування до пакунку застосунку. Ця модель також делегує підтримку двигуна візуалізації операційній системі, полегшуючи його оновлення. Дуже важливо підтримувати настільки важливий компонент в актуальному стані для уникнення можливих збоїв.
Незалежно від способу доставки, застосунки, написані на HTML, працюють на рівні абстракції, створеному двигуном, який функціонує як ізольоване середовище виконання. Зокрема, у випадку з клієнтом, який працює у браузері, застосунок має у своєму розпорядженні лише ті ресурси, які пропонує браузер. Основні функції, такі як взаємодія з елементами сторінки та запит файлів через HTTP, завжди доступні. Ресурси, які можуть містити конфіденційну інформацію, наприклад доступ до локальних файлів, географічне розташування, камера та мікрофон, вимагають явної авторизації користувача, перш ніж застосунок зможе їх використовувати.
Мови вебклієнта
Центральним елементом клієнта вебзастосунку, який працює на сервері, є HTML-документ. На додаток до представлення елементів інтерфейсу, які браузер відображає в структурованому вигляді, HTML-документ містить адреси всіх файлів, необхідних для правильного представлення та роботи клієнта.
Сам по собі HTML не має великої універсальності для створення більш складних інтерфейсів і не має функцій програмування загального призначення. Із цієї причини HTML-документ, який повинен функціонувати як клієнтська програма, завжди супроводжується одним або кількома наборами CSS і JavaScript.
CSS може бути в окремому файлі або безпосередньо в самому файлі HTML. Основне призначення CSS – налаштувати зовнішній вигляд і розташування елементів інтерфейсу HTML. Хоча це не є суворою необхідністю, більш складні інтерфейси зазвичай вимагають модифікації CSS-властивостей елементів відповідно до їхніх потреб.
JavaScript є практично обов’язковим компонентом. Процедури, написані на JavaScript, відповідають на події в браузері. Ці події викликаються користувачем або можуть бути неінтерактивними. Без JavaScript документ HTML практично обмежений текстом і зображеннями. Використання JavaScript в HTML-документах дає змогу розширити інтерактивність за межі гіперпосилань і форм, що робить сторінку, яка відображається браузером, схожою на інтерфейс звичайного застосунку.
JavaScript — це мова програмування загального призначення, але основне її використання — у вебзастосунках. Функції середовища виконання браузера доступні за допомогою ключових слів JavaScript, які використовуються у сценарії для виконання потрібної операції. Наприклад, термін document
використовується в коді JavaScript для звернення до HTML-документа, пов’язаного з кодом JavaScript. У контексті мови JavaScript document
- це глобальний об’єкт із властивостями та методами, які можна використовувати для отримання інформації з будь-якого елемента HTML-документа. Що ще важливіше, ви можете використовувати об’єкт document
, щоб змінити його елементи та зв’язати їх із користувацькими діями, написаними на JavaScript.
Клієнтський застосунок, що базується на вебтехнологіях, є багатоплатформним, оскільки може працювати на будь-якому пристрої, який має сумісний браузер.
Однак прив’язка до браузера накладає обмеження на вебпрограми порівняно з нативними застосунками. Посередництво, яке виконує браузер, дає змогу використовувати програмування більш високого рівня і підвищує безпеку, але також збільшує використання процесорного часу та пам’яті.
Розробники постійно працюють над браузерами, щоб надати більше можливостей і покращити продуктивність JavaScript-застосунків, але є внутрішні аспекти виконання сценаріїв, таких як JavaScript, які привносять недоліки порівняно з нативними програмами для того ж обладнання.
Функцією, яка значно покращує продуктивність програм JavaScript, запущених у браузері, є WebAssembly. WebAssembly – це свого роду скомпільований JavaScript, який створює вихідний код, написаний більш ефективною мовою нижнього рівня, як-от мова C. WebAssembly може прискорити переважно дії, до яких інтенсивно залучений процесор, оскільки уникає значної частини перекладу, який виконує браузер під час виконання програми, написаної на звичайному JavaScript.
Незалежно від деталей реалізації застосунку, весь HTML-код, CSS, JavaScript та мультимедійні файли необхідно спочатку отримати із сервера. Браузер отримує ці файли так само, як Інтернет-сторінку, тобто за адресою, до якої звертається браузер.
Вебсторінка, яка діє як інтерфейс до вебпрограми, схожа на звичайний HTML-документ, але з додатковою поведінкою. На звичайних сторінках користувач після натискання посилання переходить на іншу сторінку. Вебзастосунки можуть представляти свій інтерфейс і реагувати на події користувача, не завантажуючи нові сторінки у вікні браузера. Модифікація цієї стандартної поведінки на HTML-сторінках здійснюється за допомогою програмування на JavaScript.
Наприклад, клієнт вебпошти відображає повідомлення та перемикається між папками повідомлень, не залишаючи сторінки. Це можливо, оскільки клієнт використовує JavaScript, щоб реагувати на дії користувача та робити відповідні запити до сервера. Якщо користувач натискає на тему повідомлення у папці «Вхідні», код JavaScript, пов’язаний із цією подією, запитує вміст цього повідомлення у сервера (за допомогою відповідного виклику API). Щойно клієнт отримує відповідь, браузер відображає повідомлення у відповідній частині тієї ж сторінки. Різні клієнти вебпошти можуть використовувати різні стратегії, але всі вони використовують той самий принцип.
Таким чином, окрім надання браузеру файлів, з яких складається клієнт, сервер також повинен мати можливість обробляти запити, наприклад, клієнта вебпошти, коли він запитує вміст конкретного повідомлення. Кожен запит, який може зробити клієнт, має попередньо визначену процедуру відповіді на сервері, API якого може визначати різні методи, щоб визначити, до якої процедури відноситься запит. Найпоширенішими методами є:
-
Адреси, використовуючи уніфікований локатор ресурсів (URL, Uniform Resource Locator)
-
Поля в HTTP-заголовку
-
Методи GET/POST
-
WebSockets
Один метод може бути більш підходящим, ніж інший, залежно від мети запиту та інших критеріїв, врахованих розробником. Загалом, вебзастосунки використовують комбінацію методів, кожен з яких залежить від певних обставин.
Парадигма Передачі репрезентативного стану (REST, Representational State Transfer) широко використовується для взаємодії у вебзастосунках, оскільки вона заснована на основних методах, доступних у HTTP. Заголовок HTTP-запиту починається з ключового слова, що визначає основну операцію, яку потрібно виконати: GET
,POST
, PUT
,DELETE
тощо, супроводжується відповідною URL-адресою, до якої буде застосовано дію. Якщо застосунок потребує більш конкретних операцій з більш детальним описом запитуваної операції, протокол GraphQL може бути більш підходящим вибором.
Програми, розроблені з використанням моделі клієнт/сервер, схильні до нестабільності взаємодії. Тому клієнтська програма завжди повинна використовувати ефективні стратегії передачі даних, щоб підтримувати її узгодженість і не шкодити досвіду користувача.
Серверна сторона
Незважаючи на те, що сервер є головною дійовою особою вебзастосунку, він є пасивною стороною взаємодії, яка просто відповідає на запити клієнта. На вебжаргоні сервер може посилатися на машину, яка отримує запити, програму, яка спеціально обробляє запити HTTP, або сценарій одержувача, який створює відповідь на запит. Це останнє визначення є найбільш релевантним у контексті архітектури вебзастосунків, але всі вони тісно взаємопов’язані. Хоча вони лише частково входять до сфери відповідальності розробника сервера застосунків, апаратну платформу, операційну систему та HTTP-сервер не можна ігнорувати, оскільки вони є фундаментом для роботи сервера застосунків і часто перетинаються.
Обробка шляхів із запитів
HTTP-сервери, такі як Apache і NGINX, зазвичай вимагають певних змін конфігурації для задоволення потреб застосунку. За замовчуванням традиційні HTTP-сервери безпосередньо прив’язують шлях, зазначений у запиті, до файлу в локальній файловій системі. Якщо HTTP-сервер вебсайту зберігає свої HTML-файли в каталозі /srv/www
, то наприклад, запит із шляхом /en/about.html
отримає в якості відповіді вміст файла /srv/www/en/ about.html
, якщо такий файл існує. Більш складні вебсайти, і особливо вебзастосунки, вимагають індивідуального підходу до різних типів запитів. У цьому сценарії частиною реалізації застосунку є зміна налаштувань HTTP-сервера для відповідності вимогам застосунку.
Крім того, існують фреймворки, які дають змогу інтегрувати керування HTTP-запитами та реалізацію коду застосунка в одному місці, дозволяючи розробнику зосередитися більше на призначенні програми, ніж на деталях платформи. У Node.js Express, наприклад, відображення всіх запитів і відповідне програмування реалізовані за допомогою JavaScript. Оскільки програмування клієнтів зазвичай виконується на JavaScript, багато розробників вважають гарною ідеєю для простоти подальшої підтримки коду використовувати одну мову для клієнта і сервера. Інші мови, які зазвичай використовуються для реалізації серверної сторони, як у фреймворках, так і традиційних HTTP-серверах, це PHP, Python, Ruby, Java і C#.
Системи керування базами даних
Як дані, отримані або запитані клієнтом, зберігатимуться на сервері, вирішує команда розробників, але існують загальні рекомендації, які застосовуються в більшості випадків. Зручно зберігати Статичний вміст, як то, зображення, код JavaScript і CSS, які не змінюються в короткостроковій перспективі, зручно зберігати як звичайні файли або у файловій системі сервера, або розподілено в мережі доставки вмісту (CDN, Content Delivery Network). Інші види вмісту, такі як повідомлення електронної пошти в поштовому вебзастосунку, інформація про товари в застосунку онлайн-магазину, а також журнали транзакцій, зручніше зберігати в системі керування базою даних (СКБД, DBMS - Database Management System).
Найбільш традиційним типом систем управління базами даних є реляційна база даних. У таких системах розробник застосунку визначає таблиці даних і формат введення, прийнятний для кожної таблиці. Набір таблиць у базі даних містить усі динамічні дані, які використовує та створює програма. Застосунок для онлайн-покупок, наприклад, може мати таблицю, яка містить записи з інформацією про кожен продукт в магазині, і таблицю, до якої записуються товари, придбані користувачем. Таблиця придбаних товарів містить посилання на записи в таблиці наявних товарів, створюючи зв’язки між таблицями. Такий підхід може оптимізувати зберігання та доступ до даних, а також дозволити запити в об’єднаних таблицях, використовуючи мову, прийняту в системах керування базою даних. Найпопулярнішою мовою реляційних баз даних є Structured Query Language (SQL, вимовляється як “сікуел”), вона прийнята базами даних з відкритим вихідним кодом SQLite, MySQL, MariaDB і PostgreSQL.
Альтернативою реляційним базам даних є форма бази даних, яка не вимагає жорсткої структури даних. Ці бази даних називаються нереляційними базами даних або просто NoSQL. Хоча вони можуть включати деякий функціонал, подібний до того, який є в реляційних базах даних, основна увага зосереджена на забезпеченні більшої гнучкості в збереженні та доступі до збережених даних, передаючи завдання обробки цих даних самій програмі. MongoDB, CouchDB і Redis є поширеними нереляційними системами керування базами даних.
Підтримка контенту
Незалежно від прийнятої моделі бази даних застосунки повинні додавати дані і, ймовірно, оновлювати їх протягом усього терміну життя застосунків. У деяких програмах, таких як поштовий вебзастосунок, користувачі самостійно надають дані в базу даних під час використання клієнта для надсилання та отримання повідомлень. В інших випадках, наприклад, у програмі онлайн-магазину, важливо дозволити тим, хто підтримує застосунок, змінювати базу даних, не вдаючись до програмування. Тому багато організацій використовують певну систему керування вмістом (CMS, Content Management System), яка дає змогу нетехнічним користувачам адмініструвати застосунок. Тому для більшості вебзастосунків необхідно реалізувати принаймні два типи клієнтів: непривілейований клієнт, який використовується звичайними користувачами, і привілейований клієнт, який використовується особливими користувачами для підтримки та оновлення інформації, яка надається застосунком.
Вправи до посібника
-
Яка мова програмування використовується разом з HTML для створення клієнтів вебзастосунків?
-
Чим завантаження вебзастосунку відрізняється від завантаження нативної програми?
-
Чим вебзастосунок відрізняється від нативної програми в питанні доступу до локального обладнання?
-
Наведіть одну характеристику клієнта вебзастосунку, яка відрізняє його від звичайної вебсторінки.
Дослідницькі вправи
-
Яку функцію пропонують сучасні браузери, щоб подолати низьку продуктивність клієнтів вебзастосунків із інтенсивним використанням процесора?
-
Якщо вебзастосунок використовує протокол REST для взаємодії клієнт/сервер, який HTTP-метод слід використовувати, коли клієнт запитує у сервера видалити певний ресурс?
-
Наведіть п’ять мов сценаріїв серверної сторони, які підтримує HTTP-сервер Apache.
-
Чому нереляційні бази даних вважаються легшими в обслуговуванні та оновленні, ніж реляційні?
Підсумки
Цей урок охоплює концепції та стандарти в технології та архітектурі веброзробки. Принцип простий: браузер запускає клієнтський застосунок, який взаємодіє з основною програмою, що працює на сервері. Незважаючи на таку простоту, вебзастосунки повинні поєднувати багато технологій для використання принципу клієнтських і серверних обчислень через Інтернет. Урок висвітлює наступні концепції:
-
Ролі браузерів та вебсерверів.
-
Загальні технології та стандарти веброзробки.
-
Як вебклієнти можуть взаємодіяти із сервером.
-
Типи вебсерверів та серверних баз даних.
Відповіді до вправ посібника
-
Яка мова програмування використовується разом з HTML для створення клієнтів вебзастосунків?
JavaScript
-
Чим завантаження вебзастосунку відрізняється від завантаження нативної програми?
Вебзастосунок не встановлюється. Натомість частина його працює на сервері, а інтерфейс клієнта — у звичайному браузері.
-
Чим вебзастосунок відрізняється від нативної програми в питанні доступу до локального обладнання?
Весь доступ до локальних ресурсів, таких як пам’ять, камери або мікрофони, відбувається опосередковано браузером і для роботи вимагає явної авторизації користувача.
-
Наведіть одну характеристику клієнта вебзастосунку, яка відрізняє його від звичайної вебсторінки.
Взаємодія з традиційними вебсторінками здебільшого обмежена гіперпосиланнями та надсиланням форм, тоді як клієнти вебзастосунків ближчі до інтерфейсу звичайних програм.
Відповіді до дослідницьких вправ
-
Яку функцію пропонують сучасні браузери, щоб подолати низьку продуктивність клієнтів вебзастосунків із інтенсивним використанням процесора?
Розробники можуть використовувати WebAssembly для реалізації тих частин клієнтського застосунку, які інтенсивно використовують ЦП. Код WebAssembly зазвичай має кращу продуктивність, ніж традиційний JavaScript, оскільки вимагає менше трансляції інструкцій.
-
Якщо вебзастосунок використовує протокол REST для взаємодії клієнт/сервер, який HTTP-метод слід використовувати, коли клієнт запитує у сервера видалити певний ресурс?
REST покладається на стандартні методи HTTP, тому в цьому випадку має використовувати стандартний метод
DELETE
. -
Наведіть п’ять мов сценаріїв серверної сторони, які підтримує HTTP-сервер Apache.
PHP, Go, Perl, Python і Ruby.
-
Чому нереляційні бази даних вважаються легшими в обслуговуванні та оновленні, ніж реляційні?
На відміну від реляційних баз даних, нереляційні бази даних не вимагають, щоб дані відповідали жорстким попередньо визначеним структурам, що полегшує реалізацію змін у структурах даних без впливу на наявні дані.