Опубликовано

Вышла книга “Программирование бэкенда на Python. Практическое руководство”

Программирование бэкенда на Python. Практическое руководство

Книга посвящена современным технологиям для программирования и поддержки серверной части (бэкенда) на Python. Рассказано о программировании на Python в облачной среде, управляемой через Docker и Kubernetes, о фреймворке Flask для веб-разработки на Python, о поглощении и преобразовании данных через FastAPI, об интеграции новых приложений и модулей Python с устоявшимися базами данных с применением SQLAlchemy, авторизации и аутентификации с применением OAuth, взаимодействии с брокерами сообщений Kafka и RabbitMQ, а также о повышении производительности языка Python и об эффективной работе с унаследованным кодом.

Для Python-разработчиков

В этой книге

  • Как писать эффективный и хорошо структурированный код на Python, придерживаясь наилучших практик
  • Как обеспечить эффективность приложений и упростить их масштабирование, применяя техники асинхронного программирования
  • Какова роль Kubernetes и Docker в оркестрации и контейнеризации приложений на Python
  • Как эксплуатировать облачные сервисы для обеспечения гарантированно высокой доступности и максимальной производительности.
  • Как усовершенствовать обработку данных путем интеграции с базами данных при помощи SQLAlchemy.
  • Как защищать веб-приложения, настраивая механизмы авторизации и аутентификации при помощи OAuth
  • Как эффективно обрабатывать данные в режиме реального времени при помощи брокеров сообщений RabbitMQ и Kafka
  • Как, сократить количество ошибок, реализовать непрерывную интеграцию и непрерывное развертывание

Эта книга — не просто руководство по программированию, а книга-маршрут, которая поможет выйти на уровень настоящего эксперта по серверной части стека, умеющего проектировать и развертывать мощные и эффективные приложения.

 

Тим Питерс

Тим Питерс (Tim Peters) — американский разработчик программного обеспечения, который создал алгоритм гибридной сортировки Timsort, внес большой вклад в язык программирования Python и его оригинальную реализацию CPython, а также известен в сообществе Python.
С 2001 по 2014 год он был активным членом совета директоров Python Software Foundation. Питерс был влиятельным автором списков рассылки Python. Он также является высокопоставленным участником форума Stack Overflow, в основном для ответов, касающихся Python.
Тим Питерс был удостоен награды Python Software Foundation за выдающиеся заслуги за 2017 год.
(источник, Википедия)

Книгу “Программирование бэкенда на Python. Практическое руководство” можно купить в нашем интенет-магазине.

Предисловие……………………………………………………………………. 20

Пролог……………………………………………………………………………. 23

Предварительные требования…………………………………………… 25

Начальные навыки…………………………………………………………………………………… 25

Использование кодов……………………………………………………………………………….. 25

Благодарности…………………………………………………………………. 27

ГЛАВА 1. Основы разработки внутренних компонентов……… 28

Введение……………………………………………………………………………………………………. 28

Описание разработки внутренних компонентов…………………………………… 29

Основные внутренние компоненты…………………………………………………. 29

Сервер…………………………………………………………………………………………… 29

База данных…………………………………………………………………………………. 31

Интерфейсы прикладного программирования (API)………………… 32

Веб-фреймворк……………………………………………………………………………… 33

Middleware (связующее или промежуточное программное обеспечение)      35

Кеширование………………………………………………………………………………… 36

Функционирование внутренних компонентов……………………………….. 36

Роль Python в разработке внутренних компонентов…………………………….. 38

Универсальность и читабельность…………………………………………………. 38

Универсальная стандартная библиотека………………………………………. 39

Фреймворки и инструменты для разработки внутренних компонентов               39

Поддержка асинхронной работы……………………………………………………. 40

Возможность интеграции…………………………………………………………………. 40

Возможность подключения к базам данных………………………………….. 41

Сообщество и ресурсы…………………………………………………………………….. 41

Искусственный интеллект и машинное обучение………………………….. 41

Настройка среды разработки: Python, VS Code и Linux………………………. 42

Установка Linux……………………………………………………………………………….. 42

Установка Python……………………………………………………………………………… 42

Установка Visual Studio Code (VS Code)…………………………………………. 43

Настройка VS Code для Python……………………………………………………….. 43

Настройка виртуальной среды……………………………………………………….. 44

Заключительные этапы и тестирование…………………………………………. 44

Знакомство с виртуальными средами…………………………………………………….. 45

Что такое виртуальная среда?………………………………………………………… 45

Зачем нужна виртуальная среда?…………………………………………………… 46

Как настроить и использовать виртуальную среду?…………………….. 46

Установка……………………………………………………………………………………… 46

Создание виртуальной среды…………………………………………………….. 46

Активация виртуальной среды…………………………………………………… 47

Установка пакетов……………………………………………………………………….. 47

Деактивация…………………………………………………………………………………. 47

Управление зависимостями………………………………………………………… 47

Передовой опыт………………………………………………………………………………… 48

Основные принципы работы с интерфейсом командной строки (CLI).. 49

Описание интерфейса командной строки………………………………………. 49

Основные команды интерфейса командной строки………………………. 49

Советы по использованию интерфейса командной строки………….. 52

Введение в управление версиями с помощью Git………………………………….. 53

Знакомство с управлением версиями и Git……………………………………… 53

Основные операции Git для разработки внутренних компонентов 54

Установка Git……………………………………………………………………………….. 54

Конфигурирование Git…………………………………………………………………. 54

Инициализация репозитория………………………………………………………. 54

Клонирование репозитория………………………………………………………… 55

Добавление и фиксация файлов………………………………………………….. 55

Ветвление и слияние……………………………………………………………………. 55

Размещение изменений………………………………………………………………… 56

Извлечение обновлений………………………………………………………………. 56

Обработка конфликтов при слиянии………………………………………….. 56

Использование журнала Git………………………………………………………… 56

Библиотека Python Refresher: синтаксис, структуры данных и функции 57

Синтаксис Python……………………………………………………………………………… 57

Отступы………………………………………………………………………………………… 57

Переменные………………………………………………………………………………….. 57

Комментарии………………………………………………………………………………… 58

Структуры данных…………………………………………………………………………… 58

Списки…………………………………………………………………………………………… 58

Кортежи………………………………………………………………………………………… 58

Множества……………………………………………………………………………………. 59

Словари………………………………………………………………………………………… 59

Функции…………………………………………………………………………………………….. 59

Определение функции………………………………………………………………….. 59

Вызов функции……………………………………………………………………………… 60

Параметры……………………………………………………………………………………. 60

Аргументы ключевых слов………………………………………………………….. 60

Произвольные аргументы……………………………………………………………. 61

Лямбда-функции…………………………………………………………………………… 61

Обработка ошибок……………………………………………………………………………. 61

Модули и пакеты………………………………………………………………………………. 62

Импорт модулей…………………………………………………………………………… 62

Импорт с помощью псевдонимов……………………………………………….. 62

Оператор импорта from……………………………………………………………….. 62

Передовой опыт программирования на Python…………………………………….. 63

Поддержка принципов «Дзен Python»…………………………………………….. 63

Соблюдение стандарта PEP 8…………………………………………………………. 63

Написание документальных строк…………………………………………………. 64

Использование встроенных функций и библиотек Python……………. 64

Использование списков и генераторов выражений……………………….. 65

Обработка ошибок с помощью исключений………………………………….. 65

Использование менеджеров контекста для управления ресурсами 66

Функция должна выполнять одну задачу и иметь
минимально возможный размер………………………………………………………. 66

Избежание преждевременной оптимизации…………………………………… 66

Использование контроля версий……………………………………………………… 67

Тестирование своего кода……………………………………………………………….. 67

Резюме……………………………………………………………………………………………………….. 67

ГЛАВА 2. Создание первого веб-приложения с помощью Flask 69

Введение……………………………………………………………………………………………………. 69

Основы Flask……………………………………………………………………………………………… 70

Что представляет собой Flask?………………………………………………………… 70

Основные возможности Flask…………………………………………………………… 71

Простота……………………………………………………………………………………….. 71

Гибкость……………………………………………………………………………………….. 71

Сервер разработки и отладчик…………………………………………………… 72

Основан на Юникоде…………………………………………………………………… 72

Документация………………………………………………………………………………. 72

Запуск и работа с Flask……………………………………………………………………. 72

Маршрутизация………………………………………………………………………………… 74

Шаблоны…………………………………………………………………………………………… 74

Настройка окружения Flask…………………………………………………………………….. 76

Создание проекта……………………………………………………………………………… 76

Настройка Flask………………………………………………………………………………… 77

Установка Flask……………………………………………………………………………. 77

Создание приложения Flask………………………………………………………… 77

Создание простого представления…………………………………………….. 77

Управление зависимостями с помощью Pip……………………………………. 77

Настройка приложения Flask………………………………………………………….. 78

Создание файла конфигурации………………………………………………….. 78

Загрузка конфигурации……………………………………………………………….. 78

Запуск приложения Flask…………………………………………………………………. 78

Командная строка Flask………………………………………………………………. 78

Использование скрипта……………………………………………………………….. 79

Маршрутизация и представления…………………………………………………………… 79

Определение маршрутов………………………………………………………………….. 80

Динамические маршруты………………………………………………………………… 80

Методы HTTP……………………………………………………………………………………. 81

Создание URL-адресов…………………………………………………………………….. 81

Обработка ошибок……………………………………………………………………………. 82

Эффективное сочетание маршрутов и представлений………………….. 83

Шаблоны и статические файлы………………………………………………………………. 83

Описание шаблонов…………………………………………………………………………. 84

Управление статическими файлами……………………………………………….. 85

Организация статических файлов………………………………………………. 86

Обслуживание статических файлов…………………………………………… 86

Работа с формами и загрузка файлов…………………………………………………….. 88

Flask — работа с формами………………………………………………………………. 88

Создание HTML-формы………………………………………………………………. 88

Создание маршрута для отображения формы………………………….. 88

Обработка данных формы………………………………………………………….. 88

Загрузка файлов……………………………………………………………………………….. 89

Модификация HTML-формы для загрузки файлов…………………… 89

Обработка загрузки файлов в Flask……………………………………………. 89

Основы интеграции баз данных……………………………………………………………… 90

Настройка SQLAlchemy с помощью Flask……………………………………… 92

Установка Flask-SQLAlchemy…………………………………………………….. 92

Настройка приложения……………………………………………………………….. 92

Определение моделей………………………………………………………………………. 92

Создание базы данных…………………………………………………………………….. 93

Взаимодействие с базой данных…………………………………………………….. 93

Вставка данных……………………………………………………………………………. 93

Запрос данных……………………………………………………………………………… 93

Обновление данных…………………………………………………………………….. 94

Удаление данных…………………………………………………………………………. 94

Работа с отношениями……………………………………………………………………… 94

Извлечение связанных данных………………………………………………………… 95

Использование опций запросов………………………………………………………. 95

Введение в расширения Flask………………………………………………………………….. 96

Описание расширений Flask……………………………………………………………. 96

Flask-WTF……………………………………………………………………………………… 97

Flask-SQLAlchemy………………………………………………………………………… 97

Flask-Migrate…………………………………………………………………………………. 97

Flask-Login…………………………………………………………………………………….. 98

Flask-Mail………………………………………………………………………………………. 98

Flask-RESTful……………………………………………………………………………….. 98

Использование расширений Flask…………………………………………………… 99

Развертывание приложения Flask…………………………………………………………. 100

Подготовка приложения Flask к развертыванию…………………………. 100

Выбор хостинга………………………………………………………………………………. 101

Настройка веб-сервера и сервера приложений WSGI………………… 101

Использование Heroku…………………………………………………………………… 102

Подготовка приложения……………………………………………………………. 102

Настройка Git-репозитория………………………………………………………. 102

Создание приложения Heroku………………………………………………….. 102

Выполнение проверки развертывания…………………………………….. 103

Резюме……………………………………………………………………………………………………… 103

ГЛАВА 3. Дополнительные возможности Flask………………….. 105

Введение………………………………………………………………………………………………….. 105

Создание модульной структуры больших приложений с помощью
Flask Blueprints………………………………………………………………………………………… 106

Для чего предназначен Flask Blueprints?………………………………………. 106

Создание и регистрация эскизов…………………………………………………… 107

Определение эскиза…………………………………………………………………… 107

Регистрация эскиза…………………………………………………………………….. 107

Структурирование представлений в эскизах………………………………. 108

Использование эскизов…………………………………………………………………… 108

Шаблон Application Factory во Flask…………………………………………………….. 109

Описание шаблона Application Factory………………………………………… 109

Использование шаблона Application Factory……………………………….. 110

Создание функции Factory………………………………………………………… 110

Настройка параметров конфигурации…………………………………….. 110

Регистрация сценариев и расширений…………………………………….. 111

Реализация RESTful-сервисов с помощью Flask-RESTful…………………… 112

Введение в Flask-RESTful………………………………………………………………. 112

Функционирование Flask-RESTful………………………………………………… 113

Создание REST API с помощью Flask-RESTful……………………………. 113

Тестирование API…………………………………………………………………………… 115

Аутентификация и авторизация пользователей………………………………….. 115

Значение аутентификации, авторизации и управления сессиями 115

Аутентификация…………………………………………………………………………. 115

Авторизация……………………………………………………………………………….. 116

Управление сессиями………………………………………………………………… 116

Реализация аутентификации в Flask……………………………………………… 116

Установка Flask-Login……………………………………………………………….. 116

Настройка Flask-Login………………………………………………………………. 116

Функция загрузчика пользователя…………………………………………… 117

Определение модели пользователя………………………………………….. 117

Создание маршрутов аутентификации……………………………………. 117

Выполнение авторизации………………………………………………………………. 118

Управление доступом на основе ролей (RBAC)……………………… 118

Проверка прав доступа……………………………………………………………… 119

Обработка ошибок и ведение журнала………………………………………………… 119

Flask — обработка ошибок……………………………………………………………. 120

Обработка ошибок приложения……………………………………………….. 120

Обработка исключений…………………………………………………………….. 120

Flask — ведение журнала………………………………………………………………. 121

Использование протоколирования для данных запроса……………. 121

Пользовательские средства регистрации…………………………………….. 122

Методы оптимизации производительности…………………………………………. 122

Оптимизация баз данных……………………………………………………………….. 123

Оптимизация запросов………………………………………………………………. 123

Пакетные вставки и обновления……………………………………………….. 123

Оптимизация обработки запросов………………………………………………… 123

Эффективная последовательность данных……………………………… 123

Асинхронные обработчики………………………………………………………. 124

Кеширование ответов………………………………………………………………… 125

Настройка приложений и веб-серверов……………………………………….. 125

Мониторинг и профилирование……………………………………………………. 126

Интеграция приложений Flask с Docker……………………………………………….. 127

Установка Docker……………………………………………………………………………. 127

Создание файла Dockerfile………………………………………………………… 128

Создание файла .dockerignore…………………………………………………… 129

Сборка образа Docker……………………………………………………………….. 129

Запуск контейнера Docker………………………………………………………… 129

Тестирование контейнера Docker…………………………………………………. 129

Резюме……………………………………………………………………………………………………… 130

ГЛАВА 4. Введение в FastAPI………………………………………….. 132

Введение………………………………………………………………………………………………….. 132

Переход на FastAPI………………………………………………………………………………… 133

Основные различия между FastAPI и Flask………………………………….. 133

Производительность………………………………………………………………….. 133

Аннотации типов данных и автоматическая валидация данных 134

Внедрение зависимостей…………………………………………………………… 135

Встроенная интерактивная документация по API………………….. 136

Современные возможности Python…………………………………………… 136

Создание RESTful API с помощью FastAPI………………………………………….. 136

Определение конечных точек RESTful…………………………………………. 137

Параметры пути и строки запросов……………………………………………… 138

Параметры пути…………………………………………………………………………. 138

Параметры запросов…………………………………………………………………. 138

Использование тела запроса…………………………………………………………. 139

Обработка ответа…………………………………………………………………………… 139

Пользовательские коды состояния…………………………………………… 139

Заголовки ответа……………………………………………………………………….. 139

Обработка ошибок…………………………………………………………………………. 140

Внедрение зависимостей……………………………………………………………………….. 140

Описание внедрения зависимостей в FastAPI………………………………. 141

Как работает внедрение зависимостей в FastAPI?………………………. 141

Определение зависимостей……………………………………………………….. 141

Использование зависимостей в обработчиках маршрутов……. 142

Работа с зависимостями в больших приложениях………………………. 143

Расширенная интеграция баз данных с SQLAlchemy…………………………. 143

Настройка SQLAlchemy с помощью FastAPI……………………………….. 144

Установка необходимых пакетов…………………………………………….. 144

Настройка URL базы данных…………………………………………………… 144

Создание базы данных и таблиц……………………………………………… 144

Интеграция SQLAlchemy с FastAPI……………………………………………….. 145

Зависимость от сеанса работы с базой данных……………………… 145

Выполнение операций с базой данных……………………………………. 145

Асинхронная обработка………………………………………………………………… 146

Настройка асинхронного подключения к базе данных…………. 146

Подключение и отключение событий………………………………………. 146

Использование асинхронных запросов…………………………………… 146

Реализация фоновых задач……………………………………………………………………. 147

Основы фоновых задач в FastAPI………………………………………………….. 147

Как определить фоновые задачи?…………………………………………………. 147

Реализация более сложных фоновых операций………………………….. 148

Настройка Celery……………………………………………………………………….. 148

Запуск задач Celery из FastAPI…………………………………………………. 149

Интеграция FastAPI и Docker………………………………………………………………… 150

Установка Docker……………………………………………………………………………. 150

Создание Docker-файла для FastAPI…………………………………………….. 150

Создание образа Docker………………………………………………………………… 151

Запуск приложения FastAPI в контейнере Docker……………………….. 152

Проверка работоспособности приложения…………………………………. 152

Резюме……………………………………………………………………………………………………… 152

ГЛАВА 5. Работа с базами данных…………………………………… 154

Введение………………………………………………………………………………………………….. 154

MySQL и PostgreSQL………………………………………………………………………………. 155

MySQL……………………………………………………………………………………………… 156

PostgreSQL……………………………………………………………………………………….. 156

Выбор между MySQL и PostgreSQL………………………………………………. 157

MongoDB…………………………………………………………………………………………………. 159

Описание MongoDB и модели документов…………………………………… 159

Документы………………………………………………………………………………….. 159

Коллекции…………………………………………………………………………………… 159

Преимущества MongoDB……………………………………………………………….. 160

Ключевые особенности MongoDB………………………………………………… 160

Интеграция MongoDB…………………………………………………………………….. 161

Установка…………………………………………………………………………………… 161

Подключение к MongoDB…………………………………………………………. 161

Операции…………………………………………………………………………………….. 161

Принципы проектирования баз данных……………………………………………….. 162

Основные принципы проектирования баз данных………………………. 162

Нормализация……………………………………………………………………………. 162

Модель отношений между сущностями…………………………………… 163

Пример разработки схемы базы данных……………………………………… 163

SQL-код для создания таблиц……………………………………………………….. 164

Операции CRUD……………………………………………………………………………………… 165

Создание записей (CREATE)…………………………………………………………. 165

Чтение записей (READ)………………………………………………………………….. 166

Обновление записей (UPDATE)……………………………………………………… 166

Удаление записей (DELETE)…………………………………………………………. 167

Рекомендации по выполнению операций CRUD…………………………. 167

Расширенные методы обработки запросов…………………………………………. 167

Подзапросы…………………………………………………………………………………….. 168

Пример программы: «Поиск курсов, на которые не зарегистрировался ни один студент»      168

Объединения……………………………………………………………………………………. 168

Пример программы: «Список студентов с информацией о курсах» 169

Агрегатные функции SQL………………………………………………………………. 169

Пример программы: «Подсчет количества студентов, записанных на каждый курс»               169

Расширенная фильтрация с помощью оператора HAVING………… 170

Пример программы: «Курсы с более чем 5 студентами»……….. 170

Оконные функции……………………………………………………………………………. 170

Пример программы: «Распределение студентов по дате зачисления на каждый курс»            170

Миграция баз данных и контроль версий……………………………………………. 171

Основные сведения о миграции баз данных………………………………… 172

Настройка Alembic…………………………………………………………………………. 172

Установка Alembic…………………………………………………………………….. 172

Инициализация Alembic…………………………………………………………….. 172

Настройка Alembic…………………………………………………………………….. 173

Создание и применение миграций………………………………………………… 173

Создание миграции……………………………………………………………………. 173

Редактирование сценария миграции………………………………………… 173

Применение миграций……………………………………………………………….. 173

Управление изменениями схемы базы данных……………………………. 174

Создание версий………………………………………………………………………… 174

Совместная работа……………………………………………………………………. 174

Развертывание……………………………………………………………………………. 174

Интеграция баз данных с ОРМ на Python……………………………………………. 175

Обзор ОРМ для Python…………………………………………………………………… 175

Обзор SQLAlchemy…………………………………………………………………………. 175

SQLAlchemy Core……………………………………………………………………….. 175

SQLAlchemy ORM……………………………………………………………………… 176

Интеграция SQLAlchemy ORM с Python………………………………………. 176

Установка…………………………………………………………………………………… 176

Определение моделей………………………………………………………………… 176

Создание сессии…………………………………………………………………………. 177

Выполнение операций с базой данных……………………………………. 177

Стратегии кеширования для оптимизации баз данных………………………. 178

Типы кеширования…………………………………………………………………………. 178

Кеширование результатов………………………………………………………… 178

Кеширование объектов……………………………………………………………… 178

Кеширование планов запросов………………………………………………… 179

Реализация кеширования в веб-приложениях……………………………… 180

Redis в качестве кеша………………………………………………………………… 180

Стратегия кеширования…………………………………………………………….. 180

Рекомендации по эффективному кешированию…………………………… 181

Резюме……………………………………………………………………………………………………… 181

ГЛАВА 6. Асинхронное программирование в Python…………. 184

Введение………………………………………………………………………………………………….. 184

Общее описание асинхронного программирования…………………………… 186

Что такое асинхронное программирование?……………………………….. 186

Асинхронное программирование для разработки внутренних компонентов     186

Примеры использования асинхронного программирования……… 187

Веб-серверы……………………………………………………………………………….. 187

Обработка данных…………………………………………………………………….. 187

Работа приложения в режиме реального времени………………….. 187

Архитектура микросервисов…………………………………………………….. 188

Как работает асинхронное программирование?………………………… 188

Цикл событий……………………………………………………………………………… 188

Корутины (сопрограммы или асинхронные функции)…………… 188

Задачи и фьючерсы……………………………………………………………………. 188

Пример программы: «Асинхронное выполнение»……………………….. 189

Основы asyncio……………………………………………………………………………………….. 189

Синтаксис async……………………………………………………………………………… 190

Синтаксис await……………………………………………………………………………… 190

Структура программы asyncio………………………………………………………. 190

Пример программы: «Интеграция библиотеки asyncio в приложение для университета»             191

Разработка асинхронных веб-приложений…………………………………………. 192

Пример программы: «Асинхронное университетское
приложение»……………………………………………………………………………………. 193

Настройка и установка……………………………………………………………… 193

Определение конечных точек асинхронной связи………………….. 193

Асинхронный доступ к базам данных………………………………………………….. 194

Описание асинхронного доступа к базам данных………………………. 194

Настройка и установка………………………………………………………………….. 195

Интеграция асинхронных операций с базами данных
в веб-фреймворке FastAPI………………………………………………………………. 195

Конфигурация…………………………………………………………………………….. 195

Функции асинхронной базы данных……………………………………….. 196

Использование асинхронных функций в маршрутах…………….. 197

Внедрение веб-сокетов…………………………………………………………………………… 197

WebSocket — что это?……………………………………………………………………. 197

Реализация WebSocket в FastAPI…………………………………………………… 198

Настройка и базовая конечная точка WebSocket…………………… 198

Установка FastAPI и Uvicorn…………………………………………………….. 199

Определение конечной точки WebSocket………………………………… 199

Обновление записей в режиме реального времени…………………. 199

Сохранение соединений WebSocket………………………………………… 200

Интеграция с процессом регистрации……………………………………… 200

Передовой опыт и шаблоны Async……………………………………………………….. 201

Обработка ошибок в асинхронном коде………………………………………. 201

Пример программы: «Корректная обработка ошибок базы данных»             201

Управление параллельными процессами и отмена задач………….. 202

Пример программы: «Отмена устаревших запросов
к базе данных»……………………………………………………………………………. 202

Использование менеджеров контекста для управления ресурсами 203

Пример программы: «Асинхронный менеджер контекста для подключения к базе данных»  203

Разделение и модульное построение кода…………………………………… 203

Пример программы: «Модульная обработка WebSocket»…….. 203

Отладка асинхронных приложений……………………………………………………… 204

Инструменты и методы отладки……………………………………………………. 205

Пример программы: «Ведение подробного журнала»…………… 205

Пример программы: «Использование сообщений print для получения немедленной обратной связи»               205

Пример программы: «Включение режима отладки asyncio»…. 206

Резюме……………………………………………………………………………………………………… 207

ГЛАВА 7. Организация работы с пользователями
и их безопасность……………………………………………………………. 209

Введение………………………………………………………………………………………………….. 209

Проектирование систем аутентификации пользователей………………….. 210

Определение требований……………………………………………………………….. 210

Компоненты системы аутентификации пользователей………………. 211

Пример программы: «Подключение аутентификации пользователей» 212

Реализация стандартов OAuth и JWT…………………………………………………… 213

Введение в OAuth……………………………………………………………………………. 213

Введение в веб-токены JSON (JWT)……………………………………………….. 214

Пример программы: «Реализация OAuth и JWT»…………………………. 214

Настройка OAuth с помощью провайдера………………………………. 214

Интеграция OAuth в приложение……………………………………………… 215

Реализация JWT для управления сеансами…………………………….. 215

Контроль доступа на основе ролей (RBAC)………………………………………… 216

Определение эффективности RBAC……………………………………………… 216

Пример программы: «Внедрение RBAC»……………………………………… 217

Определение ролей и разрешений……………………………………………. 217

Настройка среды……………………………………………………………………….. 217

Определение моделей пользователей и ролей………………………… 218

Создание ролей………………………………………………………………………….. 218

Назначение ролей пользователям……………………………………………. 218

Обеспечение проверки ролей……………………………………………………. 219

Обеспечение безопасности REST API………………………………………………….. 219

Что необходимо для обеспечения безопасности REST API?……… 219

Стратегии обеспечения безопасности REST API………………………… 220

Использование HTTPS………………………………………………………………. 220

Аутентификация и авторизация……………………………………………….. 220

Валидация и дезинфекция входных данных……………………………. 221

Внедрение ограничения скорости……………………………………………. 222

Управление сеансами пользователей…………………………………………………… 222

Основные понятия…………………………………………………………………………… 222

Реализация безопасного управления сеансами…………………………… 223

Создание и обработка сеансов…………………………………………………. 223

Сохранение сеансов………………………………………………………………….. 224

Истечение срока действия сеанса…………………………………………….. 224

Обслуживание и безопасность сеансов…………………………………… 224

Внедрение двухфакторной аутентификации……………………………………….. 225

Описание двухфакторной аутентификации…………………………………. 225

Шаги по внедрению 2FA………………………………………………………………… 226

Генерация секретного ключа для пользователя……………………… 226

Связывание секретного ключа с приложением Authenticator… 227

Проверка TOTP во время входа в систему……………………………….. 227

Интеграция 2FA в процесс входа в систему…………………………….. 227

Резюме……………………………………………………………………………………………………… 228

ГЛАВА 8. Развертывание внутренних приложений, написанных на языке Python          230

Введение………………………………………………………………………………………………….. 230

Обзор Docker и контейнеров………………………………………………………………….. 231

Описание контейнерной технологии…………………………………………….. 231

Роль Docker в контейнеризации…………………………………………………….. 231

Доминирующее положение Docker……………………………………………….. 232

Пример программы: «Использование Docker»…………………………….. 233

Использование Docker для приложений, написанных на языке Python 234

Установка Docker……………………………………………………………………………. 234

Контейнеризация университетского приложения……………………….. 236

Подготовка приложения……………………………………………………………. 236

Создание Dockerfile……………………………………………………………………. 236

Сборка образа Docker……………………………………………………………….. 237

Запуск контейнера Docker………………………………………………………… 237

Kubernetes для управления приложениями………………………………………….. 237

Описание Kubernetes………………………………………………………………………. 238

Установка и настройка Kubernetes……………………………………………….. 238

Установка Minikube…………………………………………………………………… 238

Установка kubectl………………………………………………………………………. 239

Развертывание университетского приложения на Kubernetes……. 239

Создание конфигурации развертывания…………………………………. 239

Развертывание приложения………………………………………………………. 240

Открытие приложения……………………………………………………………….. 240

Доступ к приложению……………………………………………………………….. 240

CI/CD для внутренних приложений на Python……………………………………. 241

Основные принципы работы CI/CD……………………………………………… 241

Использование CI/CD для университетского приложения…………. 241

Настройка контроля версий……………………………………………………… 241

Выбор инструмента CI/CD……………………………………………………….. 242

Использование Nginx в качестве обратного прокси-сервера……………… 244

Функция Nginx…………………………………………………………………………………. 244

Установка и настройка Nginx………………………………………………………… 245

Установка Nginx…………………………………………………………………………. 245

Настройка Nginx в качестве обратного прокси-сервера………… 245

SSL-сертификаты и настройка HTTPS…………………………………………………. 247

Описание SSL/TLS и HTTPS………………………………………………………….. 247

Генерация SSL-сертификатов………………………………………………………… 247

Установка Certbot………………………………………………………………………. 248

Получение сертификата……………………………………………………………. 248

Проверка установки SSL-сертификата…………………………………….. 248

Конфигурация HTTPS в Nginx……………………………………………………….. 248

Масштабирование приложений на Python………………………………………….. 249

Необходимость масштабирования……………………………………………….. 249

Горизонтальное и вертикальное масштабирование…………………… 250

Горизонтальное масштабирование (масштабирование наружу/внутрь)       250

Вертикальное масштабирование (масштабирование вверх/вниз) 250

Реализация масштабирования в Kubernetes…………………………………. 250

Определение запросов и лимитов ресурсов…………………………….. 251

Настройка горизонтального автоматического масштабирования подсистем             252

Контроль масштабирования…………………………………………………….. 253

Резюме……………………………………………………………………………………………………… 253

ГЛАВА 9. Микросервисы и интеграция с облаком…………….. 255

Введение………………………………………………………………………………………………….. 255

Проектирование и разработка микросервисов с помощью Python……. 256

Разбиение приложения на микросервисы…………………………………….. 257

Определение границ сервисов……………………………………………………….. 257

Создание независимых сред………………………………………………………….. 257

Разработка API для межсервисного взаимодействия………………….. 258

Упаковка сервисов в контейнеры………………………………………………….. 258

Управление микросервисами с помощью Docker и Kubernetes………….. 259

Контейнеризация с помощью Docker……………………………………………. 259

Упаковка каждого микросервиса в контейнер………………………… 260

Организация работы с помощью Kubernetes……………………………….. 260

Создание развертываний Kubernetes……………………………………….. 261

Управление сервисами с помощью Kubernetes Services…………. 261

Развертывание приложений Python на AWS……………………………………….. 262

Настройка AWS для университетского приложения…………………… 262

Создание учетной записи AWS………………………………………………… 262

Настройка IAM (управление идентификацией и доступом)….. 263

Настройка AWS CLI………………………………………………………………….. 263

Развертывание приложения на AWS…………………………………………….. 264

Вариант 1: использование Elastic Beanstalk……………………………. 264

Вариант 2: использование EC2………………………………………………… 264

Использование бессерверных архитектур с AWS Lambda………………… 265

Описание AWS Lambda…………………………………………………………………. 265

Установка AWS Lambda………………………………………………………………… 266

Подготовка приложения……………………………………………………………. 266

Создание функции Lambda в AWS…………………………………………… 267

Реализация gRPC для взаимодействия микросервисов……………………….. 268

Зачем нужен gRPC………………………………………………………………………….. 268

Реализация gRPC в микросервисах на Python……………………………… 269

Определение сервиса с помощью буферов протокола…………… 269

Создание кода сервера и клиента…………………………………………….. 270

Реализация сервиса на Python………………………………………………….. 270

Создание клиента………………………………………………………………………. 271

Резюме……………………………………………………………………………………………………… 271

ГЛАВА 10. Брокеры сообщений и асинхронная обработка задач 273

Введение………………………………………………………………………………………………….. 273

Обзор брокеров сообщений…………………………………………………………………… 274

Роль брокеров сообщений во внутренних приложениях…………….. 274

Redis как брокер сообщений………………………………………………………….. 275

Каким образом Redis обеспечивает обмен сообщениями?…….. 275

Интеграция Kafka для обработки данных в реальном времени………… 277

Описание Apache Kafka…………………………………………………………………. 277

Основные компоненты Kafka………………………………………………………… 277

Интеграция Kafka для обработки данных в режиме
реального времени………………………………………………………………………….. 278

Установка и настройка Kafka………………………………………………….. 278

Создание тем………………………………………………………………………………. 278

Реализация производителей и потребителей Kafka……………….. 278

Асинхронная обработка задач с помощью Celery………………………………. 280

Знакомство с асинхронной обработкой задач…………………………….. 280

Использование Celery для асинхронной обработки задач…………. 280

Как работает Celery?…………………………………………………………………. 281

Использование Celery…………………………………………………………………….. 281

Установка Celery и Redis…………………………………………………………… 281

Настройка Celery……………………………………………………………………….. 281

Запуск Celery Worker…………………………………………………………………. 282

Постановка задач в очередь……………………………………………………… 282

RabbitMQ как альтернативный брокер сообщений…………………………….. 282

Описание RabbitMQ и принцип его работы…………………………………. 283

Интеграция RabbitMQ……………………………………………………………………. 283

Установка RabbitMQ…………………………………………………………………. 284

Настройка RabbitMQ в приложении………………………………………… 284

Отправка сообщений…………………………………………………………………. 285

Резюме……………………………………………………………………………………………………… 285

Эпилог………………………………………………………………………….. 287

Опубликовано

Встречайте: “Современные фронтенды на базе HTMX”

Современные фронтенды на базе HTMX

Рассмотрены практические подходы к созданию современных динамичных веб-интерфейсов и веб-приложений с использованием HTMX — технологии, позволяющей строить интерактивные приложения на основе HTML с минимальным объемом JavaScript- кода. Подробно описаны принципы работы с HTMX в связке с Java, Spring Boot и Thymeleaf. Показаны базовые приемы замены DOM-элементов с использованием различных триггеров, работа с запросами и заголовками, а также использование библиотеки htmx-spring-boot. Рассказано, как использовать замены Out Of Band. Описаны способы реализации современных UI-паттернов, таких как ленивая загрузка, активный поиск, бесконечная прокрутка и валидация форм в реальном времени. Рассматриваются возможности подключения веб-компонентов и усиления клиентской логики с помощью JavaScript и библиотеки Alpine.js. Описано, как обеспечить безопасность веб-приложений на HTMX, как обрабатывать события, отправляемые сервером, и использовать веб-сокеты.

Создание динамичных и интерактивных веб-интерфейсов больше не требует сложного программирования на JavaScript. Благодаря технологии HTMX — революционному подходу к фронтенд-разработке — вы можете строить мощные веб-приложения, используя минимум скриптов и привычный HTML. Эта книга поможет вам освоить HTMX в связке с Java, Spring Boot и Thymeleaf, изменив ваше представление о веб-разработке.
Автор последовательно вводит в основы работы с HTMX — от простых механизмов замены DOM-элементов с использованием различных триггеров до полноценной интеграции с контроллерами Spring Boot. Показаны современные UI-паттерны: ленивая загрузка, активный поиск, бесконечная прокрутка, валидация форм в реальном времени и другие. Рассматриваются возможности использования веб-фреймворков и компонентов JavaScript для усиления интерактивности на стороне клиента.

Вы узнаете:

• Как устроен синтаксис HTMX: триггеры, цели, замены
• Как работать с заголовками запросов и ответов
• Как использовать библиотеку htmx-spring-boot
• Что такое замены Out Of Band и зачем они нужны
• Как использовать JavaScript и библиотеку Alpine.js вместе с HTMX
• Как обеспечить безопасность приложений на HTMX
• Как реализовать ленивую загрузку, бесконечную прокрутку и активный поиск
• Как выполнять валидацию форм в реальном времени
• Как интегрировать HTMX с веб-компонентами и обмениваться данными в реальном времени
• Как обрабатывать события, отправляемые сервером, и использовать веб-сокеты

Книгу “Современные фронтенды на базе HTMX” можно купить в нашем интенет-магазине.

Напутственное слово……………………………………………………………………………….. 9

Предисловие…………………………………………………………………………………………… 11

Благодарности……………………………………………………………………………………….. 13

ГЛАВА 1. Используемые методы……………………………………………………………. 15

1.1. HTMX…………………………………………………………………………………………………………………………………… 15

1.2. Spring Boot……………………………………………………………………………………………………………………………. 16

1.3. Spring Framework…………………………………………………………………………………………………………………. 16

1.4. Thymeleaf…………………………………………………………………………………………………………………………….. 17

1.5. Alpine……………………………………………………………………………………………………………………………………. 17

1.6. Tailwind CSS…………………………………………………………………………………………………………………………. 18

ГЛАВА 2. Начало работы………………………………………………………………………. 19

2.1. Предварительные настройки……………………………………………………………………………………………… 19

2.1.1. macOS/Linux………………………………………………………………………………………………………………. 19

2.1.2. Windows……………………………………………………………………………………………………………………… 20

2.2. Инструмент ttcli…………………………………………………………………………………………………………………… 20

2.2.1. Суть вопроса……………………………………………………………………………………………………………… 20

2.2.2. Установка…………………………………………………………………………………………………………………… 21

2.2.3. Генерация проекта……………………………………………………………………………………………………. 21

2.2.4. Запуск приложения…………………………………………………………………………………………………… 25

2.3. Плагины IntelliJ IDEA………………………………………………………………………………………………………….. 26

2.4. Краткие выводы………………………………………………………………………………………………………………….. 27

ГЛАВА 3. Начало работы с HTMX…………………………………………………………. 29

3.1. Пример «Hello World»………………………………………………………………………………………………………….. 29

3.2. Триггеры………………………………………………………………………………………………………………………………. 34

3.2.1. Модификаторы триггеров………………………………………………………………………………………… 34

3.2.2. Фильтры триггеров……………………………………………………………………………………………………. 35

3.2.3. Особые события………………………………………………………………………………………………………… 35

3.2.4. Пример……………………………………………………………………………………………………………………….. 37

3.3. Цели……………………………………………………………………………………………………………………………………… 43

3.4. Замена………………………………………………………………………………………………………………………………….. 43

3.5. HTTP-глаголы……………………………………………………………………………………………………………………… 47

3.6. Краткие выводы………………………………………………………………………………………………………………….. 47

ГЛАВА 4. Заголовки запроса/ответа………………………………………………………. 49

4.1. Заголовки запроса………………………………………………………………………………………………………………. 49

4.2. Заголовки ответа…………………………………………………………………………………………………………………. 51

4.3. Библиотека htmx-spring-boot……………………………………………………………………………………………… 52

4.4. Краткие выводы………………………………………………………………………………………………………………….. 55

ГЛАВА 5. Проект 1: TodoMVC……………………………………………………………….. 57

5.1. Начальная реализация……………………………………………………………………………………………………….. 57

5.2. Усиление приложения………………………………………………………………………………………………………… 69

5.3. Тонкая реализация HTMX…………………………………………………………………………………………………. 70

5.3.1. Добавление нового элемента todo…………………………………………………………………………… 70

5.3.2. Обновление количества пунктов……………………………………………………………………………… 74

5.3.3. Пометка пункта как завершенного………………………………………………………………………….. 77

5.3.4. Удаление пункта……………………………………………………………………………………………………….. 79

5.4. Краткие выводы………………………………………………………………………………………………………………….. 81

ГЛАВА 6. Замена Out Of Band………………………………………………………………… 83

6.1. Общие принципы…………………………………………………………………………………………………………………. 83

6.2. Пример…………………………………………………………………………………………………………………………………. 84

6.2.1. Генерация проекта……………………………………………………………………………………………………. 84

6.2.2. Модель предметной области……………………………………………………………………………………. 85

6.2.3. Настройка пользовательского интерфейса…………………………………………………………….. 88

6.2.4. Ввод продолжительности регистрации времени……………………………………………………. 91

6.2.5. Итоги дня……………………………………………………………………………………………………………………. 95

6.3. Краткие выводы………………………………………………………………………………………………………………….. 97

ГЛАВА 7. Скрипт на стороне клиента……………………………………………………. 99

7.1. Vanilla JavaScript…………………………………………………………………………………………………………………. 99

7.1.1. Конфигурация проекта…………………………………………………………………………………………… 100

7.1.2. Программный интерфейс Numbers………………………………………………………………………… 100

7.1.3. Веб-интерфейс…………………………………………………………………………………………………………. 103

7.1.4. Индикатор выполнения…………………………………………………………………………………………… 105

7.1.5. Обработка ошибок………………………………………………………………………………………………….. 107

7.2. Alpine.js………………………………………………………………………………………………………………………………. 112

7.2.1. Настройка проекта…………………………………………………………………………………………………. 112

7.2.2. Модель предметной области…………………………………………………………………………………. 113

7.2.3. Встроенное редактирование краткого содержания проблемы…………………………… 121

7.2.3.1. Визуальная индикация………………………………………………………………………………. 121

7.2.3.2. Реализация технологии Happy Flow…………………………………………………………. 122

7.2.3.3. Реализация отмены потока (cancel flow)………………………………………………….. 127

7.2.3.4. Обработка ошибок……………………………………………………………………………………… 131

7.2.4. Использование технологии drag-and-drop…………………………………………………………….. 133

7.3. Краткие выводы………………………………………………………………………………………………………………… 140

ГЛАВА 8. Безопасность………………………………………………………………………… 141

8.1. HTMX и безопасность………………………………………………………………………………………………………. 141

8.2. Закладки…………………………………………………………………………………………………………………………….. 141

8.2.1. Инициализация проекта…………………………………………………………………………………………. 141

8.2.2. Добавление Spring Security……………………………………………………………………………………… 142

8.3. Классическая настройка Thymeleaf……………………………………………………………………………….. 143

8.4. Добавление закладки с помощью HTMX……………………………………………………………………….. 149

8.5. Удаление закладки……………………………………………………………………………………………………………. 151

8.5.1. Удаление с помощью скрытого ввода…………………………………………………………………… 153

8.5.2. Удаление с помощью метатегов…………………………………………………………………………….. 153

8.5.3. Удаление с помощью встроенного синтаксиса Thymeleaf для JavaScript…………. 154

8.6. Обработка выхода из системы………………………………………………………………………………………… 156

8.7. Краткие выводы………………………………………………………………………………………………………………… 157

ГЛАВА 9. Проект 2: приложение для работы с контактами…………………. 159

9.1. Настройка проекта…………………………………………………………………………………………………………… 159

9.2. Добавление контакта……………………………………………………………………………………………………….. 167

9.3. Поиск………………………………………………………………………………………………………………………………….. 174

9.4. Просмотр контакта…………………………………………………………………………………………………………… 176

9.5. Редактирование и удаление контакта…………………………………………………………………………….. 179

9.6. Удаление с помощью HTMX……………………………………………………………………………………………. 185

9.7. Встроенная проверка наличия дубликатов адресов электронной почты…………………… 188

9.7.1. Реализация пользовательского валидатора…………………………………………………………. 188

9.7.2. Триггер валидации в процессе ввода…………………………………………………………………….. 191

9.7.3. Улучшение пользовательского опыта…………………………………………………………………… 193

9.7.4. Использование hx-validate для предотвращения лишних запросов…………………… 196

9.8. Пагинация………………………………………………………………………………………………………………………….. 196

9.8.1. Генерация контактов с помощью Datafaker…………………………………………………………. 197

9.8.2. Ручная пагинация……………………………………………………………………………………………………. 197

9.8.3. Шаблон «Click to load»……………………………………………………………………………………………. 201

9.8.4. Бесконечная прокрутка………………………………………………………………………………………….. 202

9.9. Активный поиск…………………………………………………………………………………………………………………. 203

9.9.1. Пагинация поиска……………………………………………………………………………………………………. 203

9.9.2. Поиск по типу………………………………………………………………………………………………………….. 205

9.10. Удаление строки из списка…………………………………………………………………………………………….. 207

9.10.1. Настройка перенаправления кнопки Delete……………………………………………………….. 210

9.11. Архивация списка контактов…………………………………………………………………………………………. 211

9.11.1. Архиватор……………………………………………………………………………………………………………… 211

9.11.2. Создание архива…………………………………………………………………………………………………… 215

9.11.3. Ссылка на скачивание………………………………………………………………………………………….. 217

9.12. Краткие выводы………………………………………………………………………………………………………………. 220

ГЛАВА 10. Веб-компоненты…………………………………………………………………. 221

10.1. Что такое веб-компоненты?……………………………………………………………………………………………. 221

10.2. Интеграция Shoelace……………………………………………………………………………………………………….. 221

10.3. Дерево GitHub…………………………………………………………………………………………………………………. 222

10.3.1. API GitHub……………………………………………………………………………………………………………. 222

10.3.2. Реализация ленивой загрузки…………………………………………………………………………….. 226

10.3.3. Добавление релизов репозитория……………………………………………………………………… 229

10.3.4. Отображение примечаний к релизу…………………………………………………………………… 230

10.4. Краткие выводы………………………………………………………………………………………………………………. 233

ГЛАВА 11. События, отправляемые сервером, и веб-сокеты………………… 235

11.1. События, отправляемые сервером………………………………………………………………………………… 235

11.1.1. Что такое «события, отправляемые сервером»?………………………………………………. 235

11.1.2. Использование расширения HTMX SSE…………………………………………………………… 235

11.1.2.1. Настройка проекта………………………………………………………………………………. 235

11.1.2.2. Загрузка файла…………………………………………………………………………………….. 238

11.1.2.3. Отображение обрабатываемых строк……………………………………………….. 241

11.1.2.4. Отображение индикатора хода выполнения…………………………………….. 246

11.1.2.5. Проверка активности подключения……………………………………………………. 249

11.2. Веб-сокеты………………………………………………………………………………………………………………………. 252

11.2.1. Что такое веб-сокеты?………………………………………………………………………………………… 252

11.2.2. Использование расширения HTMX WS……………………………………………………………. 252

11.2.2.1. Настройка проекта………………………………………………………………………………. 252

11.2.2.2. Отправка HTML-кода обратно с помощью шаблонов Thymeleaf….. 258

11.3. Краткие выводы………………………………………………………………………………………………………………. 261

Заключение………………………………………………………………………………………….. 263

ПРИЛОЖЕНИЕ. Журнал изменений……………………………………………………. 265

Предметный указатель…………………………………………………………………………. 267

Опубликовано

Новинка: “Web API. Сборник рецептов”

Web API. Сборник рецептов

Книга посвящена разработке современных веб-приложений с использованием JavaScript и встроенных возможностей браузера на основе Web API. Приведены практические примеры реализации функций, которые ранее требовали сторонних плагинов: диалоговые окна, работа с геолокацией и другими возможностями, предоставляемыми браузером. Освещаются как устоявшиеся, так и находящиеся в стадии разработки API-интерфейсы, позволяющие создавать мощные и интерактивные веб-приложения, глубоко интегрированные с устройствами пользователей. Рассматривается, как браузеры реализуют модель разрешений для предоставления доступа к таким функциям, как геолокация и push-уведомления. Каждая задача в книге сопровождается готовыми рецептами, содержащими описание проблемы, решение с пояснениями и расширенное обсуждение. Книга ориентирована на программистов с опытом работы на JavaScript, знакомых с программным интерфейсом DOM (Document Object Model).

Для программистов

Повысьте уровень JavaScript-приложений

JavaScript предоставляет веб-разработчикам богатый арсенал средств для создания динамичных и интерактивных пользовательских интерфейсов прямо в браузере. Сегодня большую часть этой функциональности обеспечивают сами браузеры.

Современные Web API позволяют веб-приложениям реализовать то, что ранее требовало установки внешних плагинов. Некоторые из этих интерфейсов еще находятся на стадии разработки и тестирования, но многие из них уже полностью готовы к использованию.

Это практическое руководство предлагает коллекцию прикладных примеров использования новейших возможностей браузерных API. Автор помогает разобраться, какие задачи можно решить с их помощью и как применять эти инструменты на практике. Поскольку речь идет о стандартизированных технологиях, вы всегда можете обратиться к надежной документации, например, на MDN Web Docs.

Полученные знания пригодятся вам в проектах любой сложности — от личных до корпоративных.

  • Добавьте веб-приложениям функции, схожие с возможностями современных браузеров
  • Познакомьтесь с широким набором инструментов, предлагаемых актуальными браузерными API
    • Изучите перспективные API-интерфейсы, находящиеся в стадии разработки
  • Используйте новые элементы интерфейса, такие как диалоговые окна, без подключения сторонних библиотек
    • Создавайте мощные и интерактивные приложения с глубокой интеграцией в возможности пользовательских устройств
  • Изучите реализуемую браузерами модель разрешений для предоставления доступа к таким функциям, как геолокация и push-уведомления

Книгу “Web API. Сборник рецептов: Повысьте уровень JavaScript-приложений” можно купить в нашем интенет-магазине.

Предисловие. 13

Возможности современных браузеров. 14

Недостатки сторонних библиотек. 14

Для кого предназначена эта книга. 14

Что содержится в этой книге. 15

Дополнительные ресурсы.. 15

Соглашения об используемых обозначениях. 16

Использование примеров кода. 17

Платформа онлайн-обучения O’Reilly. 18

Как с нами связаться. 18

Благодарности. 18

ГЛАВА 1. Асинхронные API. 21

1.0. Введение. 21

1.1. Работа с промисами. 22

1.2. Загрузка изображения с помощью использования резервного изображения (fallback) 24

1.3. Связывание промисов. 26

1.4. Использование ключевых слов  async и await 28

1.5. Параллельное использование промисов. 29

1.6. Анимация элемента с помощью  requestAnimationFrame. 30

1.7. Обертывание событий API в промис. 33

ГЛАВА 2. Простое сохранение данных с помощью Web Storage API. 36

2.0. Введение. 36

2.1. Проверка поддержки Web Storage. 38

2.2. Сохранение строковых данных. 39

2.3. Сохранение простых объектов. 40

2.4. Сохранение сложных объектов. 41

2.5. Отслеживание изменений в хранилище. 46

2.6. Поиск всех известных ключей. 47

2.7. Удаление данных. 49

ГЛАВА 3. URL-адреса и маршрутизация. 51

3.0. Введение. 51

3.1. Определение относительного URL-адреса. 52

3.2. Удаление параметров запроса из URL-адреса. 54

3.3. Добавление параметров запроса к URL-адресу. 56

3.4. Чтение параметров запроса. 58

3.5. Создание простого маршрутизатора  на стороне клиента. 60

3.6. Сопоставление URL-адресов с шаблонами. 62

ГЛАВА 4. Сетевые запросы.. 65

4.0. Введение. 65

4.1. Отправка запроса с помощью XMLHttpRequest 66

4.2. Отправка GET-запроса с помощью Fetch API 67

4.3. Отправка POST-запроса с помощью Fetch API 69

4.4. Загрузка файла с помощью Fetch API 70

4.5. Отправка Beacon. 71

4.6. Прослушивание удаленных событий  с помощью server-sent events. 72

4.7. Обмен данными с WebSockets  в режиме реального времени. 74

ГЛАВА 5. База данных IndexedDB.. 77

5.0. Введение. 77

5.1. Создание, чтение и удаление объектов  в базе данных. 79

5.2. Обновление существующей базы данных. 85

5.3. Выполнение запросов с использованием индексов. 87

5.4. Поиск строковых значений с помощью курсора. 90

5.5. Разбивка большого набора данных на страницы.. 92

5.6. Использование промисов  с IndexedDB API 94

ГЛАВА 6. Наблюдение за элементами DOM… 97

6.0. Введение. 97

6.1. Отложенная загрузка изображения при прокрутке. 99

6.2. Обертывание IntersectionObserver промисом.. 101

6.3. Автоматическая пауза при воспроизведении видео. 102

6.4. Анимация изменений высоты.. 103

6.5. Изменение содержимого элемента  в зависимости от размера. 105

6.6. Применение перехода  в момент появления элемента в поле зрения. 107

6.7. Использование режима бесконечной прокрутки. 108

ГЛАВА 7. Формы.. 110

7.0. Введение. 110

7.1. Заполнение поля формы из локального хранилища. 111

7.2. Отправка формы с помощью Fetch и FormData API 112

7.3. Отправка формы в формате JSON.. 114

7.4. Создание обязательного поля формы.. 116

7.5. Ограничения при вводе числа. 117

7.6. Определение шаблона валидации. 118

7.7. Валидация формы.. 119

7.8. Применение пользовательской логики валидации. 122

7.9. Проверка группы флажков. 124

7.10. Асинхронная проверка поля формы.. 127

ГЛАВА 8. API веб-анимации. 130

8.0. Введение. 130

8.1. Применение эффекта “пульсации”  при нажатии кнопки. 132

8.2. Запуск и остановка анимации. 135

8.3. Анимация вставки и удаления элементов DOM.. 136

8.4. Реверсирование анимации. 137

8.5. Отображение индикатора прокрутки. 141

8.6. Создание подпрыгивающего элемента. 143

8.7. Одновременный запуск нескольких анимаций. 144

8.8. Отображение анимации загрузки. 146

8.9. Соблюдение в анимации  предпочтений пользователя. 148

ГЛАВА 9. Web Speach API. 150

9.0. Введение. 150

9.1. Добавление продиктованного текста  в текстовое поле. 152

9.2. Создание Promise-помощника  для распознавания речи. 155

9.3. Получение доступных голосов. 156

9.4. Синтез речи. 157

9.5. Настройка параметров синтеза речи. 159

9.6. Автоматическая приостановка речи. 160

ГЛАВА 10. Работа с файлами. 161

10.0. Введение. 161

10.1. Загрузка текста из файла. 161

10.2. Загрузка изображения из URL-адреса данных. 164

10.3. Загрузка видео  в качестве URL-адреса объекта. 166

10.4. Загрузка изображения с помощью перетаскивания. 167

10.5. Проверка и запрос разрешений. 170

10.6. Экспорт данных API в файл. 171

10.7. Экспорт данных API со ссылкой  для скачивания. 173

10.8. Загрузка файла с помощью перетаскивания. 175

ГЛАВА 11. Интернационализация. 177

11.0. Введение. 177

11.1. Форматирование даты.. 178

11.2. Получение частей отформатированной даты.. 178

11.3. Форматирование относительной даты.. 179

11.4. Форматирование чисел. 181

11.5. Округление знаков после точки. 182

11.6. Форматирование ценового диапазона. 183

11.7. Форматирование единиц измерения. 184

11.8. Применение правил плюрализации. 184

11.9. Подсчет символов, слов и предложений. 186

11.10. Форматирование списков. 187

11.11. Сортировка массива имен. 188

ГЛАВА 12. Веб-компоненты.. 190

12.0. Введение. 190

12.1. Создание компонента  для отображения сегодняшней даты.. 193

12.2. Создание компонента  для форматирования пользовательской даты.. 194

12.3. Создание компонента обратной связи. 196

12.4. Создание компонента профильной карточки. 200

12.5. Создание компонента изображения  с отложенной загрузкой. 202

12.6. Создание компонента раскрытия информации. 204

12.7. Создание стилизованного компонента кнопки. 207

ГЛАВА 13. Элементы интерфейса пользователя. 211

13.0. Введение. 211

13.1. Создание диалогового окна  предупреждения. 212

13.2. Создание диалогового окна подтверждения. 215

13.3. Создание веб-компонента  диалогового окна подтверждения. 218

13.4. Использование элемента раскрытия информации. 220

13.5. Отображение всплывающего окна. 222

13.6. Ручное управление всплывающим окном.. 223

13.7. Позиционирование всплывающего окна  относительно элемента. 224

13.8. Отображение всплывающей подсказки. 227

13.9. Отображение уведомления. 229

ГЛАВА 14. Интеграция устройств. 231

14.0. Введение. 231

14.1. Считывание состояния батареи. 231

14.2. Считывание состояния сети. 234

14.3. Определение местоположения устройства. 235

14.4. Отображение местоположения устройства  на карте. 237

14.5. Копирование и вставка текста. 238

14.6. Совместное использование контента  с помощью Web Share API 241

14.7. Создание вибрации устройства. 242

14.8. Настройка ориентации устройства. 243

ГЛАВА 15. Измерение производительности. 245

15.0. Введение. 245

15.1. Измерение производительности загрузки страниц. 246

15.2. Измерение эффективности  использования ресурсов. 247

15.3. Поиск самых медленных ресурсов. 247

15.4. Определение тайминга для конкретного ресурса. 248

15.5. Профилирование производительности  рендеринга. 249

15.6. Профилирование многоэтапных задач. 251

15.7. Прослушивание показателей производительности. 253

ГЛАВА 16. Работа с консолью… 255

16.0. Введение. 255

16.1. Стилизации вывода консоли. 255

16.2. Использование уровней в журналах сообщений. 256

16.3. Создание именованных регистраторов. 257

16.4. Отображение массива объектов  в таблице. 258

16.5. Использование консольных таймеров. 260

16.6. Использование консольных групп. 261

16.7. Использование счетчиков. 263

16.8. Регистрация переменной и ее значения. 264

16.9. Протоколирование трассировки стека. 265

16.10. Проверка ожидаемых значений. 266

16.11. Изучение свойств объекта. 267

ГЛАВА 17. CSS. 269

17.0. Введение. 269

17.1. Выделение текстовых областей. 269

17.2. Предотвращение появления текста  без стилизации. 272

17.3. Анимация переходов DOM.. 274

17.4. Изменение таблиц стилей во время выполнения. 276

17.5. Условная установка CSS-класса. 277

17.6. Соответствие медиазапросам.. 277

17.7. Получение вычисленного стиля элемента. 278

ГЛАВА 18. Медиа. 281

18.0. Введение. 281

18.1. Запись экрана. 281

18.2. Захват изображения с камеры пользователя. 284

18.3. Захват видео с камеры пользователя. 286

18.4. Определение возможностей  системной поддержки медиа. 288

18.5. Применение видеофильтров. 290

ГЛАВА 19. Заключительные замечания. 292

19.0. Введение. 292

19.1. В защиту сторонних библиотек. 292

19.2. Определяйте функции, а не версии браузера. 292

19.3. Полифилы.. 293

19.4. Заглядывая в будущее. 293

Предметный указатель. 296

Об авторе. 302

Об изображении на обложке. 303