Лекция 1. Введение в разработку интернет-приложений
Цели лекции
К концу занятия вы сможете:
- объяснять, что такое интернет-приложение и чем оно отличается от настольного;
- описывать клиент-серверную модель и роли frontend и backend;
- перечислять основные этапы жизненного цикла разработки;
- называть ключевые вызовы (масштабируемость, безопасность, производительность) и современные тенденции;
- понимать место курса и стека Python/FastAPI в общей картине.
1. Понятие интернет-приложения
Интернет-приложение (веб-приложение) — это программный комплекс, который работает в распределённой среде и взаимодействует с пользователем через сеть Интернет. Его логика и данные размещаются на сервере, а пользователь обращается к ним удалённо — чаще всего через веб-браузер или специализированный клиент (мобильное приложение, другой сервис).
Ключевая идея: программа физически находится не на устройстве пользователя, а на сервере. Пользователь получает доступ к функциональности «как к услуге», не задумываясь о том, где именно выполняется код.
1.1. Отличие от настольных приложений
Классическое настольное (desktop) приложение устанавливается непосредственно на компьютер пользователя, выполняется его процессором и хранит данные локально. Интернет-приложение переносит вычисления и хранение на серверную сторону.
| Признак | Настольное приложение | Интернет-приложение |
|---|---|---|
| Где выполняется логика | На устройстве пользователя | Преимущественно на сервере |
| Установка | Требуется инсталляция | Достаточно браузера / тонкого клиента |
| Доступ | С конкретного устройства | С любого устройства в сети |
| Обновление | Каждый пользователь обновляет сам | Централизованно на сервере |
| Хранение данных | Локально | Централизованно (БД на сервере) |
| Зависимость от платформы | Высокая (Windows/macOS/Linux) | Низкая (нужен браузер) |
| Работа без сети | Возможна | Обычно ограничена или невозможна |
1.2. Ключевые свойства интернет-приложений
- Доступность — приложение доступно из любой точки, где есть подключение к сети, и в любое время.
- Многопользовательность — с системой одновременно работают тысячи и миллионы пользователей; сервер должен корректно обрабатывать параллельные запросы и разделять данные между пользователями.
- Обновляемость — новая версия выкладывается централизованно на сервере, и все пользователи сразу получают её без ручной переустановки.
- Независимость от платформы — клиенту достаточно браузера; операционная система и «железо» пользователя почти не важны.
- Централизованное хранение и обслуживание — данные и резервные копии находятся в одном управляемом месте.
1.3. Примеры
- электронная коммерция: Ozon, Wildberries, Amazon;
- социальные сети и медиа: ВКонтакте, Telegram Web, YouTube;
- онлайн-банкинг: Сбербанк Онлайн, Т-Банк;
- корпоративные системы: CRM, ERP, системы документооборота;
- сервисы продуктивности: Google Docs, Notion, онлайн-почта.
2. Клиент-серверная модель
Интернет-приложения строятся по клиент-серверной архитектуре: функции разделены между клиентом, который отправляет запросы, и сервером, который их обрабатывает и возвращает ответ.
[ Клиент ] --- запрос (HTTP) ---> [ Сервер ] <---> [ База данных ] браузер <--- ответ (HTML/JSON) --- логикаБазовый цикл взаимодействия:
- Клиент формирует запрос (например, открыть страницу, отправить форму).
- Запрос по сети (HTTP/HTTPS) приходит на сервер.
- Сервер выполняет бизнес-логику, при необходимости обращается к базе данных.
- Сервер формирует ответ (HTML-страница или данные в формате JSON).
- Клиент отображает результат пользователю.
2.1. Составные части системы
- Клиентская часть (Frontend) — пользовательский интерфейс и интерактивность.
- Серверная часть (Backend) — бизнес-логика, обработка данных, аутентификация и авторизация.
- База данных — хранение информации.
- Сеть и протоколы — транспорт между клиентом и сервером.
2.2. Сеть и протоколы
- Основной протокол взаимодействия — HTTP/HTTPS (HTTPS — это HTTP, защищённый шифрованием TLS).
- Для постоянного двустороннего обмена (чаты, уведомления, онлайн-игры) применяется WebSocket.
- Для эффективного взаимодействия между сервисами — gRPC.
- Основной формат обмена данными — JSON (де-факто стандарт), исторически также применялся XML.
3. Frontend и Backend
Разделение на frontend и backend — фундамент современной веб-разработки. Эти части решают разные задачи и используют разные технологии.
3.1. Frontend (клиентская часть)
Отвечает за то, что видит и с чем взаимодействует пользователь: вёрстку, оформление, реакцию на действия.
- Базовые технологии: HTML (структура), CSS (оформление), JavaScript (поведение).
- Современные библиотеки и фреймворки: React, Vue.js, Angular.
- Распространённый подход — одностраничные приложения (SPA, Single Page Application), где страница не перезагружается целиком, а обновляет лишь нужные части, обращаясь к серверу за данными.
3.2. Backend (серверная часть)
Отвечает за «невидимую» логику: обработку запросов, правила работы системы, доступ к данным, безопасность.
- Языки и фреймворки: Python (FastAPI, Django, Flask), JavaScript/TypeScript (Node.js, NestJS), Java (Spring), Go, PHP (Laravel), Swift (Vapor).
- В нашем курсе основной стек — Python + FastAPI: современный фреймворк для построения веб-API, ориентированный на скорость разработки, асинхронность и автоматическую генерацию документации.
3.3. База данных
- Реляционные СУБД (таблицы, связи, язык SQL): PostgreSQL, MySQL.
- Нереляционные СУБД (NoSQL): MongoDB (документы), Redis (ключ-значение, кэш), Cassandra (большие распределённые данные).
| Слой | Назначение | Примеры технологий |
|---|---|---|
| Frontend | Интерфейс, интерактивность | HTML, CSS, JS, React, Vue |
| Backend | Логика, обработка, безопасность | Python/FastAPI, Node.js, Java |
| База данных | Хранение информации | PostgreSQL, MongoDB, Redis |
| Сеть | Транспорт данных | HTTP/HTTPS, WebSocket, gRPC |
4. Этапы разработки (жизненный цикл ПО)
Разработка интернет-приложения подчиняется общему жизненному циклу программного обеспечения.
-
Анализ требований
- определение целей и задач системы;
- формирование технического задания (ТЗ);
- согласование с заказчиком и будущими пользователями.
-
Проектирование
- выбор архитектурного стиля (монолит, микросервисы, serverless);
- проектирование модели данных;
- определение интерфейсов API.
-
Реализация (разработка)
- написание клиентской и серверной частей;
- интеграция с базами данных и внешними сервисами.
-
Тестирование
- проверка корректности функционала (модульные, интеграционные тесты);
- нагрузочное тестирование;
- тестирование безопасности.
-
Развёртывание и сопровождение
- контейнеризация и публикация (Docker, Kubernetes);
- настройка CI/CD (автоматическая сборка и доставка);
- мониторинг, поддержка, выпуск обновлений.
Важно: этот цикл, как правило, итеративный — приложение развивается по кругу, проходя этапы заново при добавлении новой функциональности.
5. Основные вызовы разработки
-
Масштабируемость
- задача: обслуживать рост числа пользователей и нагрузки;
- решения: горизонтальное масштабирование (добавление серверов), балансировка нагрузки, облачные технологии.
-
Безопасность
- угрозы: SQL-инъекции, XSS, CSRF, кража персональных данных;
- меры: HTTPS/TLS, безопасное хранение паролей (хеширование), контроль доступа, валидация входных данных.
-
Производительность
- задача: обеспечить быстрый отклик системы;
- методы: кэширование (Redis, CDN), оптимизация запросов к БД, асинхронная обработка.
-
Кроссплатформенность
- задача: одинаково удобная работа на ПК, смартфонах, планшетах;
- решение: адаптивный интерфейс (responsive design).
Эти вызовы взаимосвязаны: например, кэширование одновременно повышает производительность и помогает масштабируемости, а небрежная оптимизация может ослабить безопасность.
6. Современные тенденции
- SPA (одностраничные приложения) — отзывчивый интерфейс, обращающийся к серверу за данными, а не за готовыми страницами.
- API-first разработка — приложение сначала проектируется как набор API (REST, GraphQL, gRPC), а интерфейсы (веб, мобильный) подключаются к ним. Этот подход естественно ложится на FastAPI.
- Облачные технологии и DevOps — размещение приложений в облаке, контейнеризация (Docker), оркестрация (Kubernetes), автоматизация поставки (CI/CD).
- Микросервисная архитектура — система разбивается на небольшие независимые сервисы вместо одного монолита, что упрощает развитие и масштабирование отдельных частей.
- Serverless — выполнение отдельных функций в облаке без управления серверами (AWS Lambda, Google Cloud Functions).
- Интеграция искусственного интеллекта — рекомендательные системы, чат-боты, голосовые ассистенты.
7. Значение интернет-приложений
Интернет-приложения сегодня — это основа цифровой экономики и повседневной жизни. Они обеспечивают:
- автоматизацию бизнес-процессов;
- новые каналы взаимодействия с клиентами;
- глобальную доступность сервисов независимо от местоположения;
- интеграцию с большими данными (Big Data), искусственным интеллектом и интернетом вещей (IoT).
Поэтому разработка интернет-приложений — комплексная дисциплина, объединяющая сетевые технологии, программирование, работу с базами данных и информационную безопасность. Именно эти компоненты мы будем изучать в течение курса, постепенно собирая полноценное backend-приложение на Python/FastAPI.
Краткие итоги
- Интернет-приложение выполняет логику на сервере и доступно через сеть; в отличие от настольного, оно не требует установки и обновляется централизованно.
- Ключевые свойства: доступность, многопользовательность, обновляемость, независимость от платформы.
- Основа архитектуры — клиент-серверная модель: клиент шлёт запрос, сервер обрабатывает и возвращает ответ.
- Frontend отвечает за интерфейс (HTML/CSS/JS, React/Vue), backend — за логику и данные (Python/FastAPI и др.).
- Разработка проходит этапы жизненного цикла: анализ → проектирование → реализация → тестирование → развёртывание и сопровождение.
- Главные вызовы: масштабируемость, безопасность, производительность, кроссплатформенность.
- Тенденции: SPA, API-first, облако и DevOps, микросервисы, serverless, интеграция ИИ.
Вопросы для самопроверки
- Чем интернет-приложение принципиально отличается от настольного? Приведите 3 различия.
- Что означают свойства «доступность», «многопользовательность» и «обновляемость»?
- Опишите цикл взаимодействия клиента и сервера по шагам.
- За что отвечает frontend, а за что — backend? Назовите технологии каждого слоя.
- В чём разница между реляционными и нереляционными базами данных?
- Перечислите этапы жизненного цикла разработки и кратко поясните каждый.
- Какие меры применяют для защиты веб-приложения от основных угроз?
- Что такое SPA и подход API-first? Как они связаны с современной разработкой?
- Почему кэширование влияет одновременно на производительность и масштабируемость?
- Какое место в общей картине занимает стек Python/FastAPI?