Разработка веб-приложений с использованием программных платформ

Тема 1. Архитектура веб-приложений

Разработка веб-приложений с использованием программных платформ

План лекции

Основные вопросы

  • Статические и динамические ресурсы
  • Клиент, сервер и путь запроса
  • HTTP-запрос и HTTP-ответ
  • Состояние, cookies и сессии
  • Серверное выполнение PHP
  • MVC и варианты архитектуры

Цели лекции

  • Проследить запрос от URL до ответа
  • Читать основные поля HTTP-сообщений
  • Разделять роли компонентов MVC
  • Объяснить место PHP и фреймворка
  • Подготовить среду к первой практике
Лекция 1. Архитектура веб-приложений
Разработка веб-приложений с использованием программных платформ

Сайт, приложение, ресурс

Веб-сайт

  • Набор связанных ресурсов под общим доменом
  • Страницы, стили, сценарии, изображения
  • Основная задача часто связана с публикацией информации

Веб-приложение

  • Принимает ввод и выполняет прикладные операции
  • Хранит или изменяет данные
  • Формирует ответ с учетом запроса и прав пользователя

Для HTTP и сайт, и приложение являются источниками ресурсов с адресами URL.

Лекция 1. Архитектура веб-приложений
Разработка веб-приложений с использованием программных платформ

Статический и динамический ответ

Признак Статический ресурс Динамический ресурс
Источник Готовый файл Результат выполнения программы
Данные запроса Обычно не влияют на содержимое Определяют результат
База данных Не обязательна Часто используется
Пример /assets/logo.svg /products/42
Статика:   URL -> файл -> HTTP-ответ
Динамика:  URL -> код -> данные -> шаблон или JSON -> HTTP-ответ

Одно приложение обычно отдает и статические, и динамические ресурсы.

Лекция 1. Архитектура веб-приложений
Разработка веб-приложений с использованием программных платформ

Роли клиента и сервера

Клиент

  • Инициирует запрос
  • Указывает URL и метод
  • Передает заголовки и иногда тело
  • Получает ответ
  • Браузер строит DOM, применяет CSS и исполняет JavaScript

Серверная сторона

  • Принимает и направляет запрос
  • Проверяет данные и права
  • Выполняет прикладную логику
  • Обращается к хранилищам и внешним сервисам
  • Возвращает статус, заголовки и тело
Лекция 1. Архитектура веб-приложений
Разработка веб-приложений с использованием программных платформ

Что происходит после ввода URL

1. Браузер разбирает URL
2. DNS находит IP-адрес домена
3. Клиент устанавливает защищенное соединение для HTTPS
4. Браузер отправляет HTTP-запрос
5. Веб-сервер передает динамический запрос приложению
6. Приложение выполняет код и при необходимости читает данные
7. HTTP-ответ возвращается клиенту
8. Браузер запрашивает CSS, JavaScript, шрифты и изображения

Одна видимая страница обычно требует нескольких HTTP-запросов.

Лекция 1. Архитектура веб-приложений
Разработка веб-приложений с использованием программных платформ

Компоненты серверной стороны

Браузер
   |  HTTPS
   v
Веб-сервер / reverse proxy
   |  динамический запрос
   v
PHP runtime -> приложение -> база данных
                    |       -> кэш
                    |       -> внешние API
                    v
                HTTP-ответ
  • Веб-сервер может сразу отдать статический файл
  • PHP runtime исполняет серверный код, часто через PHP-FPM
  • Приложение не обязано обращаться к базе данных в каждом запросе
Лекция 1. Архитектура веб-приложений
Разработка веб-приложений с использованием программных платформ

Из чего состоит HTTP-запрос

GET /products/42?currency=BYN HTTP/1.1
Host: shop.example
Accept: text/html
Cookie: session=abc123

Стартовая строка

  • Метод: GET
  • Цель: /products/42?currency=BYN
  • Версия протокола

Остальные части

  • Заголовки передают метаданные
  • Пустая строка отделяет заголовки
  • Тело содержит данные, если оно нужно запросу
Лекция 1. Архитектура веб-приложений
Разработка веб-приложений с использованием программных платформ

Методы HTTP и их свойства

Метод Типичное назначение Безопасный Идемпотентный
GET Получить представление ресурса да да
POST Отправить данные или выполнить действие нет нет
PUT Полностью заменить ресурс по известному URI нет да
PATCH Частично изменить ресурс нет не гарантируется
DELETE Удалить ресурс нет да

CRUD помогает запомнить методы, но не определяет семантику HTTP.

Лекция 1. Архитектура веб-приложений
Разработка веб-приложений с использованием программных платформ

Из чего состоит HTTP-ответ

HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Cache-Control: no-store
Set-Cookie: session=abc123; HttpOnly; Secure

<h1>Карточка товара</h1>

Стартовая строка

  • Версия протокола
  • Код состояния 200
  • Краткое описание OK

Остальные части

  • Заголовки описывают ответ
  • Тело содержит HTML, JSON, файл или другие данные
  • Для некоторых ответов тело отсутствует
Лекция 1. Архитектура веб-приложений
Разработка веб-приложений с использованием программных платформ

Классы кодов состояния

Класс Смысл Частые примеры
1xx Промежуточная информация 100 Continue
2xx Запрос успешно обработан 200 OK, 201 Created, 204 No Content
3xx Нужен другой шаг или используется кэш 301, 302, 304
4xx Проблема в запросе или доступе 400, 401, 403, 404, 422
5xx Сервер не смог обработать корректный запрос 500, 502, 503

Код является частью контракта. Клиент не должен угадывать результат по тексту тела.

Лекция 1. Архитектура веб-приложений
Разработка веб-приложений с использованием программных платформ

HTTP не хранит состояние диалога

Запрос 1: GET /cart      + Cookie: session=abc123
Запрос 2: POST /cart     + Cookie: session=abc123
                              |
                              v
                    сервер находит данные сессии

HTTP

  • Каждый запрос самодостаточен
  • Соединение не заменяет пользовательскую сессию
  • Заголовки переносят контекст запроса

Состояние приложения

  • Cookie хранится у клиента
  • Сессия обычно хранится на сервере
  • Идентификатор связывает запрос с сессией
Лекция 1. Архитектура веб-приложений
Разработка веб-приложений с использованием программных платформ

Где выполняется PHP

На сервере

  • PHP runtime загружает точку входа
  • Код читает параметры запроса
  • Приложение выполняет логику
  • Результат становится телом HTTP-ответа

В браузере

  • Исходный PHP-код не исполняется
  • Браузер получает готовый ответ
  • HTML отображается, JavaScript исполняется отдельно
index.php -> PHP runtime -> HTML или JSON -> браузер
Лекция 1. Архитектура веб-приложений
Разработка веб-приложений с использованием программных платформ

Минимальный динамический ответ на PHP

<?php
declare(strict_types=1);

$name = htmlspecialchars(
    $_GET['name'] ?? 'мир',
    ENT_QUOTES,
    'UTF-8'
);

header('Content-Type: text/html; charset=UTF-8');
?>
<h1>Привет, <?= $name ?></h1>
GET /?name=Анна -> PHP читает параметр -> браузер получает HTML
Лекция 1. Архитектура веб-приложений
Разработка веб-приложений с использованием программных платформ

Зачем нужен веб-фреймворк

Повторяющиеся задачи

  • Маршрутизация URL
  • Разбор запроса и создание ответа
  • Middleware и обработка ошибок
  • Валидация и управление сессией

Структура приложения

  • Контейнер зависимостей и конфигурация
  • Шаблоны и доступ к данным
  • Миграции, очереди, кэш
  • Инструменты тестирования

Фреймворк дает правила и готовые механизмы, но не выбирает архитектуру вместо разработчика.

Лекция 1. Архитектура веб-приложений
Разработка веб-приложений с использованием программных платформ

MVC: три разные ответственности

Model

  • Данные предметной области
  • Правила и операции над ними
  • Доступ к хранилищу через соответствующий слой

View

  • Формирует представление результата
  • В серверном приложении часто является HTML-шаблоном
  • Не выполняет прикладные решения

Controller

  • Принимает уже направленный запрос
  • Вызывает нужные операции модели или сервисов
  • Выбирает ответ и его представление
Лекция 1. Архитектура веб-приложений
Разработка веб-приложений с использованием программных платформ

Цикл запроса в MVC-приложении

HTTP-запрос
     |
     v
Точка входа -> Router -> Middleware -> Controller
                                         |
                              +----------+----------+
                              v                     v
                         Model / Service       внешние сервисы
                              |
                              v
                         база данных
                              |
                              v
Controller -> View или JSON -> HTTP-ответ

MVC описывает разделение кода приложения, а не всю сетевую инфраструктуру.

Лекция 1. Архитектура веб-приложений
Разработка веб-приложений с использованием программных платформ

Пример: запрос карточки товара

GET /products/42
  1. Router сопоставляет путь с ProductController::show.
  2. Middleware проверяет сессию, локаль и другие условия.
  3. Controller получает идентификатор 42.
  4. Model или сервис запрашивает товар в хранилище.
  5. Если товара нет, приложение возвращает 404 Not Found.
  6. Если товар найден, View формирует HTML.
  7. Приложение возвращает 200 OK и Content-Type: text/html.
Лекция 1. Архитектура веб-приложений
Разработка веб-приложений с использованием программных платформ

HTML и JSON: два представления данных

Серверный HTML

  • Сервер заполняет HTML-шаблон
  • Браузер получает готовую разметку
  • Подходит для страниц и форм
Content-Type: text/html

JSON API

  • Сервер возвращает структурированные данные
  • Интерфейс строит JavaScript или мобильное приложение
  • Один API могут использовать разные клиенты
Content-Type: application/json
Лекция 1. Архитектура веб-приложений
Разработка веб-приложений с использованием программных платформ

Варианты структуры и развертывания

Вариант Когда уместен Основная цена
Серверный монолит Большинство учебных и бизнес-приложений Компоненты выпускаются вместе
Монолит с API Есть веб-страницы и внешние клиенты Нужно поддерживать два интерфейса
SPA или мобильный клиент с API Богатый клиентский интерфейс Сложнее клиент, безопасность и состояние
Микросервисы Нужны независимые команды и развертывания Сеть, согласованность данных, наблюдаемость

Начинать с микросервисов без конкретной причины обычно дороже, чем развивать модульный монолит.

Лекция 1. Архитектура веб-приложений
Разработка веб-приложений с использованием программных платформ

Архитектура включает требования к качеству

Что требуется от системы

  • Безопасность
  • Надежность и восстановление
  • Производительность
  • Масштабирование при росте нагрузки
  • Сопровождаемость

Что помогает этого достичь

  • Проверка входных данных и разграничение доступа
  • Журналы, метрики и трассировка
  • Кэш и фоновые задачи по измерениям
  • Тесты и автоматизированное развертывание
  • Явные границы модулей
Лекция 1. Архитектура веб-приложений
Разработка веб-приложений с использованием программных платформ

Демонстрация: читаем запрос в DevTools

  1. Откройте DevTools, вкладку Network.
  2. Включите фильтр Doc и перезагрузите страницу.
  3. Найдите Request URL и Request Method.
  4. Посмотрите request headers и response headers.
  5. Найдите Status Code и Content-Type.
  6. Перейдите к фильтрам CSS, JS, Img, Fetch/XHR.
  7. Объясните, почему одна страница создала несколько запросов.

Вкладка Network показывает наблюдаемое поведение системы, а не предполагаемую схему.

Лекция 1. Архитектура веб-приложений
Разработка веб-приложений с использованием программных платформ

Подготовка к лабораторной работе

php -v
php -S localhost:8000
curl -i "http://localhost:8000/?name=Анна"

Проверьте среду

  • Поддерживаемая версия PHP
  • Редактор и терминал
  • Браузер с DevTools
  • Рабочий каталог проекта

Зафиксируйте результат

  • Стартовая строка запроса
  • Код ответа
  • Content-Type
  • Тело ответа
  • Отличие PHP-файла от полученного HTML
Лекция 1. Архитектура веб-приложений
Разработка веб-приложений с использованием программных платформ

Резюме

Веб и HTTP

  • Клиент инициирует обмен
  • URL адресует ресурс
  • Запрос и ответ имеют стартовую строку, заголовки и возможное тело
  • Код состояния сообщает результат
  • Состояние приложения строится поверх HTTP

Серверное приложение

  • PHP выполняется на сервере
  • Фреймворк обрабатывает типовые инфраструктурные задачи
  • Router, Controller, Model и View имеют разные роли
  • MVC не описывает всю инфраструктуру
  • Архитектуру выбирают по требованиям и ограничениям
Лекция 1. Архитектура веб-приложений
Разработка веб-приложений с использованием программных платформ

Вопросы для самопроверки: Web и HTTP

Ресурсы и обмен

  1. Чем динамический ресурс отличается от статического?
  2. Какие действия выполняет браузер после ввода URL?
  3. Из каких частей состоит HTTP-запрос?
  4. Что означает идемпотентность HTTP-метода?

Ответ сервера и состояние

  1. Чем классы кодов 2xx, 4xx и 5xx отличаются друг от друга?
  2. Для чего нужен заголовок Content-Type?
  3. Как приложение поддерживает сессию, если HTTP не хранит состояние?
Лекция 1. Архитектура веб-приложений
Разработка веб-приложений с использованием программных платформ

Вопросы для самопроверки: приложение

PHP и фреймворк

  1. Где выполняется PHP-код и что получает браузер?
  2. Какие задачи веб-фреймворк решает для разработчика?
  3. Почему исходные данные пользователя нельзя сразу вставлять в HTML?

MVC и архитектура

  1. За что отвечают Model, View и Controller?
  2. Почему Router не следует считать частью Controller?
  3. Чем MVC отличается от выбора между монолитом и микросервисами?
  4. Какие издержки появляются при выделении микросервисов?
Лекция 1. Архитектура веб-приложений
Разработка веб-приложений с использованием программных платформ

Полезные ресурсы: Web и PHP

HTTP и клиент-серверная модель

PHP

Лекция 1. Архитектура веб-приложений
Разработка веб-приложений с использованием программных платформ

Полезные ресурсы: архитектура и практика

Архитектура приложения

Анализ HTTP

Лекция 1. Архитектура веб-приложений

Лекция 1, 2 академических часа. Цель: дать общую модель работы веб-приложения до изучения PHP и фреймворков. Зависимости от предыдущих тем нет. Лекция готовит к лабораторной работе по настройке среды, запуску PHP и анализу HTTP-запросов.

Спросите, какие компоненты студенты уже могут назвать между вводом URL и появлением страницы. Вернитесь к ответам после схемы полного цикла.

Примеры: сайт кафедры в основном публикует материалы, интернет-магазин управляет каталогом, корзиной и заказами. Граница между сайтом и приложением условна.

Подчеркните: динамический ответ не обязан быть HTML. Сервер может вернуть JSON, CSV, PDF, изображение или ответ без тела.

Клиентом может быть не только браузер: мобильное приложение, curl, Postman или другой сервер выполняют ту же роль.

Откройте вкладку Network и перезагрузите страницу. Покажите первый запрос документа и последующие запросы ресурсов. Не углубляйтесь в устройство DNS и TLS: здесь важна последовательность.

Назовите Nginx и Apache как примеры веб-серверов, но не связывайте архитектуру с одним продуктом. Reverse proxy может завершать TLS, вести журнал и распределять нагрузку.

Покажите отдельно путь и query-параметр. Полный URL известен клиенту, а в HTTP/1.1 домен передается заголовком Host.

Безопасный метод не должен изменять состояние по намерению клиента. Идемпотентность означает, что повтор одинакового запроса имеет тот же ожидаемый эффект, а не обязательно тот же код ответа.

Свяжите Content-Type с обработкой тела: браузер должен знать, получил ли он HTML, JSON, изображение или другой формат.

Разберите различие 401 и 403: в первом случае нужны учетные данные, во втором сервер понял пользователя, но запрещает действие.

Исправьте частое упрощение: HTTP не хранит состояние, но приложение поверх HTTP может поддерживать сессию. Cookie может содержать не только идентификатор сессии, поэтому не называйте эти понятия синонимами.

Не привязывайте принцип к конкретной версии. Для новой среды следует выбирать поддерживаемую ветку PHP и проверять ее на php.net.

Сначала запустите пример с обычным именем, затем с HTML-тегом. Объясните, почему данные пользователя экранируются перед вставкой в HTML. Полную тему безопасности разберите позже.

Свяжите с дальнейшим курсом: Laravel и Symfony решают сходные инфраструктурные задачи, хотя их API и соглашения различаются.

Две важные поправки: Model не равна базе данных, а Controller не является маршрутизатором. Маршрутизатор выбирает контроллер до его выполнения.

Пройдите схему слева направо. На исходной схеме лекции отсутствовал Router, а View выглядела как обязательный посредник между Model и клиентом. Здесь View нужна только для представления результата.

Спросите, что изменится для API. Шаги 1-5 сохранятся, а вместо HTML-шаблона приложение сформирует JSON.

Не называйте View всем фронтендом. В SPA интерфейс живет на клиенте, а серверный контроллер может вернуть JSON без серверного HTML-шаблона.

Разведите понятия: MVC организует код внутри приложения, а монолит и микросервисы описывают границы развертывания. Они не являются взаимоисключающими уровнями одной классификации.

Подчеркните: выбор технологии без измеримых требований не является архитектурным решением. Например, кэш нужен после обнаружения повторяющейся дорогой операции, а не автоматически.

Возьмите страницу без авторизации и личных данных. Не демонстрируйте значения рабочих cookies и токенов.

Для Windows команда php должна быть доступна в PATH. Если среда использует контейнер, выполните те же проверки внутри контейнера и объясните перенаправление порта.

Вернитесь к начальному вопросу о пути URL. Попросите одного студента провести запрос через все компоненты без подсказки.

Попросите отвечать на примере запроса GET /products/42. Для вопроса об идемпотентности сравните повторные PUT и POST.

Проверьте два заблуждения: Model не является синонимом таблицы базы данных, а микросервисы не являются обязательным следующим шагом после MVC.

Предложите начать с двух материалов MDN. RFC нужен как нормативный источник, но читать его целиком на первом занятии не требуется.

Сопоставьте схему жизненного цикла Laravel со слайдом о MVC. Затем предложите самостоятельно повторить демонстрацию во вкладке Network.