profession

level

3

Бэкенд-разработчик

Backend builds what sits behind the screen: it takes requests, checks access, stores data and answers fast.

monthly pay

junior 120 000 ₽ · mid 250 000 ₽ · senior 400 000 ₽

The job is the service behind the screen.

20 blocks · 160 lessons

A profession cannot start free. It opens together with Python. Every course · 3899 ₽ / month

progress

0%

block 1

Профессия бэкенд-разработчик

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

course
  1. 1Чем занимается бэкенд2099 ₽
  2. 2Клиент и сервер2099 ₽
  3. 3Метод запроса2099 ₽
  4. 4Путь к ресурсу2099 ₽
  5. 5Код статуса2099 ₽
  6. 6Тело ответа2099 ₽
  7. 7Запрос, обработчик, ответ2099 ₽
  8. 8Лог обработанного запроса2099 ₽
  9. Проверка блока2099 ₽

block 2

Числа сервера

Класс кода статуса через целочисленное деление, доля ошибок 5xx, время ответа в миллисекундах и секундах, средний и пиковый RPS, число страниц и offset при пагинации, ограничение лимита выдачи, запас мощности инстансов и размер ответа в килобайтах.

course
  1. 1Класс кода статуса2099 ₽
  2. 2Доля ошибок сервера2099 ₽
  3. 3Время обработки запроса2099 ₽
  4. 4Нагрузка в RPS2099 ₽
  5. 5Число страниц2099 ₽
  6. 6Offset и лимит страницы2099 ₽
  7. 7Запас мощности2099 ₽
  8. 8Размер ответа2099 ₽
  9. Проверка блока2099 ₽

block 3

Строки протокола

Нормализация пути через strip, lower и replace, путь и query-строка через find и срезы, значение параметра запроса, имена заголовков без учёта регистра, поиск в заголовках, тело ответа f-строкой, slug из заголовка статьи и маскирование токена в логе.

course
  1. 1Нормализация пути2099 ₽
  2. 2Query-строка2099 ₽
  3. 3Значение параметра2099 ₽
  4. 4Заголовки без учёта регистра2099 ₽
  5. 5Поиск в заголовке2099 ₽
  6. 6Тело ответа f-строкой2099 ₽
  7. 7Slug из заголовка статьи2099 ₽
  8. 8Маскирование токена2099 ₽
  9. Проверка блока2099 ₽

block 4

Маршруты и права

Маршрутизация цепочкой if/elif/else по пути и методу, ответы 404 Not Found и 405 Method Not Allowed, проверка токена и ролей через and/or/not, разница между 401 и 403, валидация тела запроса и порядок проверок при выборе ответа.

course
  1. 1Таблица маршрутов в if/elif2099 ₽
  2. 2Метод и путь вместе2099 ₽
  3. 3404 или 4052099 ₽
  4. 4Есть ли токен2099 ₽
  5. 5Роль и права2099 ₽
  6. 6401 или 4032099 ₽
  7. 7Валидация тела запроса2099 ₽
  8. 8Порядок проверок в обработчике2099 ₽
  9. Проверка блока2099 ₽

block 5

Лимиты и повторы

Rate limiting циклом while: счётчик запросов в окне, ответ 429 и Retry-After, повтор запроса к внешнему API с лимитом попыток и break на успехе, экспоненциальная пауза и суммарное ожидание, какие ошибки повторять, обработка очереди фоновых задач, continue для пропуска и таймаут воркера по суммарному времени.

course
  1. 1Счётчик запросов клиента2099 ₽
  2. 2Окно лимита и Retry-After2099 ₽
  3. 3Повтор запроса к внешнему API2099 ₽
  4. 4Экспоненциальная пауза2099 ₽
  5. 5Какие ошибки повторять2099 ₽
  6. 6Воркер и его очередь2099 ₽
  7. 7Пропуск отменённых задач2099 ₽
  8. 8Таймаут воркера2099 ₽
  9. Проверка блока2099 ₽

block 6

Пачки запросов

Обработка пачки запросов из параллельных списков, статистика по классам кодов, доступность эндпоинтов по доле 5xx, среднее время GET и POST и самый медленный запрос, ссылки на страницы пагинации через range, проверка всех id, отдача файла частями и расчёт серверов под пиковую нагрузку.

course
  1. 1Пачка запросов из лога2099 ₽
  2. 2Коды ответов по классам2099 ₽
  3. 3Доступность эндпоинтов2099 ₽
  4. 4Чтение против записи2099 ₽
  5. 5Ссылки на страницы2099 ₽
  6. 6Все id в допустимом диапазоне2099 ₽
  7. 7Отдача файла частями2099 ₽
  8. 8Серверы под пиковую нагрузку2099 ₽
  9. Проверка блока2099 ₽

block 7

Логи и эндпоинты

Списки в логах сервиса: сбор медленных запросов через append, сортировка времён, медиана и p95 по индексу, топ эндпоинтов через count, страница результатов срезом, удаление повторных платежей по порядку, очередь фоновых задач на pop(0), объединение логов двух серверов и порядок middleware через insert и remove.

course
  1. 1Сбор медленных запросов2099 ₽
  2. 2Медиана и p952099 ₽
  3. 3Топ эндпоинтов2099 ₽
  4. 4Страница результатов срезом2099 ₽
  5. 5Повторные платежи2099 ₽
  6. 6Очередь фоновых задач2099 ₽
  7. 7Логи двух серверов2099 ₽
  8. 8Порядок middleware2099 ₽
  9. Проверка блока2099 ₽

block 8

Запросы и ответы

Запросы и ответы парами: zip для путей, кодов и размеров, enumerate для номеров строк с ошибкой, all для заполненных полей формы, any для запрещённых символов, сравнение ответов старой и новой версии API, фильтры и маскирование токенов через comprehension и сводка по эндпоинтам.

course
  1. 1Запрос и ответ рядом: zip2099 ₽
  2. 2Номера строк с ошибкой2099 ₽
  3. 3Все поля заполнены: all2099 ₽
  4. 4Запрещённые символы: any2099 ₽
  5. 5Старая и новая версия API2099 ₽
  6. 6Фильтр через comprehension2099 ₽
  7. 7Маскирование токенов в логах2099 ₽
  8. 8Сводка по эндпоинтам2099 ₽
  9. Проверка блока2099 ₽

block 9

Обработчики функциями

Обработчик запроса как функция, возвращающая статус и тело, роутер функцией с 404 и 405, функция-валидатор со списком ошибок, middleware логирования и проверки токена, таблица маршрутов с функциями-значениями, параметры по умолчанию для limit и offset и прогон лога через цепочку функций.

course
  1. 1Обработчик запроса2099 ₽
  2. 2Роутер функцией2099 ₽
  3. 3Функция-валидатор2099 ₽
  4. 4Middleware для логирования2099 ₽
  5. 5Middleware проверки токена2099 ₽
  6. 6Таблица маршрутов2099 ₽
  7. 7Умолчания для limit и offset2099 ₽
  8. 8Прогон лога через роутер2099 ₽
  9. Проверка блока2099 ₽

block 10

Разбор HTTP

HTTP-запрос как текст: стартовая строка через split, query-строка в список пар, заголовки «Name: value» без учёта регистра, сборка ответа через join, префиксы версий API через startswith и endswith, id в пути через isdigit, cookie-строка и разбор сырого запроса с проверкой Content-Length.

course
  1. 1Стартовая строка запроса2099 ₽
  2. 2Query-строка в пары2099 ₽
  3. 3Заголовки запроса2099 ₽
  4. 4Текст ответа через join2099 ₽
  5. 5Префиксы версий API2099 ₽
  6. 6Id в пути: isdigit2099 ₽
  7. 7Cookie-строка2099 ₽
  8. 8Сырой запрос целиком2099 ₽
  9. Проверка блока2099 ₽

block 11

Хранилище на словарях

Запрос и ответ словарями, «база» пользователей в словаре и CRUD: создание с новым id, чтение с 404, частичное обновление и удаление, маршрутная таблица, индекс по email и счётчики запросов по эндпоинтам.

course
  1. 1Запрос и ответ словарями2099 ₽
  2. 2Создание записи с новым id2099 ₽
  3. 3Чтение по id и 4042099 ₽
  4. 4Частичное обновление2099 ₽
  5. 5Удаление записи2099 ₽
  6. 6Маршрутная таблица2099 ₽
  7. 7Индекс по email2099 ₽
  8. 8Счётчики по эндпоинтам2099 ₽
  9. Проверка блока2099 ₽

block 12

Роли и доступ

Права ролей множествами: проверка права через in и пересечение, объединение прав нескольких ролей, разность «чего не хватает», составной ключ-кортеж (user_id, resource_id), уникальные пользователи за сутки, белый список CORS и аудит изменения прав.

course
  1. 1Права роли2099 ₽
  2. 2Права нескольких ролей2099 ₽
  3. 3Требования эндпоинта2099 ₽
  4. 4Чего не хватает2099 ₽
  5. 5Составной ключ доступа2099 ₽
  6. 6Уникальные за сутки2099 ₽
  7. 7Белый список CORS2099 ₽
  8. 8Аудит изменения прав2099 ₽
  9. Проверка блока2099 ₽

block 13

Ошибки в API

Ошибки в обработчиках: битый ввод через try/except и ответ 400, отсутствующее поле, свои ошибки через raise ValueError и KeyError, словарь «исключение → код», 500 вместо падения сервера, finally для возврата соединения, единый формат ошибки и скрытие внутренних деталей.

course
  1. 1Битый параметр — ответ 4002099 ₽
  2. 2Нет обязательного поля2099 ₽
  3. 3Свои ошибки через raise2099 ₽
  4. 4Словарь «исключение → код»2099 ₽
  5. 5500 вместо падения сервера2099 ₽
  6. 6finally и соединения2099 ₽
  7. 7Единый формат ошибки2099 ₽
  8. 8Не показывать внутренности2099 ₽
  9. Проверка блока2099 ₽

block 14

Таблицы как в базе

Список словарей как таблица базы: SELECT нужных колонок, WHERE фильтром, ORDER BY через sorted с lambda по одной и двум колонкам, LIMIT и OFFSET срезом, JOIN через индекс-словарь, GROUP BY с подсчётом и проблема N+1 против загрузки одним проходом.

course
  1. 1SELECT нужных колонок2099 ₽
  2. 2WHERE фильтром2099 ₽
  3. 3ORDER BY по колонке2099 ₽
  4. 4ORDER BY по двум колонкам2099 ₽
  5. 5LIMIT и OFFSET2099 ₽
  6. 6JOIN через индекс2099 ₽
  7. 7GROUP BY с подсчётом2099 ₽
  8. 8Проблема N+12099 ₽
  9. Проверка блока2099 ₽

block 15

JSON, хеши и токены

Модули стандартной библиотеки для бэкенда: json.loads и json.dumps для тела запроса и ensure_ascii, хеш пароля через hashlib.sha256 с солью и его проверка, токен со сроком действия на datetime, подпись токена через hmac, коды подтверждения через random с seed и secrets, base64 в заголовке Basic auth.

course
  1. 1Тело запроса в JSON2099 ₽
  2. 2Кириллица и ensure_ascii2099 ₽
  3. 3Почему не хранить пароль открыто2099 ₽
  4. 4Соль для пароля2099 ₽
  5. 5Токен со сроком действия2099 ₽
  6. 6Подпись токена через hmac2099 ₽
  7. 7Коды подтверждения2099 ₽
  8. 8Basic auth в заголовке2099 ₽
  9. Проверка блока2099 ₽

block 16

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

Раскладываем сервис по слоям классами: модели-dataclass, репозиторий с CRUD, исключения с HTTP-кодом, сервис с бизнес-правилами, роутер, middleware-классы, наследование репозиториев и сборка всех слоёв в одно приложение.

course
  1. 1Модель данных2099 ₽
  2. 2Репозиторий в памяти2099 ₽
  3. 3Исключения с HTTP-кодом2099 ₽
  4. 4Сервисный слой2099 ₽
  5. 5Класс Router2099 ₽
  6. 6Middleware-класс2099 ₽
  7. 7Наследование репозиториев2099 ₽
  8. 8Все слои вместе2099 ₽
  9. Проверка блока2099 ₽

block 17

Хранение в файлах

Сервис хранит данные на диске: база в JSON-файле с загрузкой при старте, атомарная запись через временный файл и os.replace, версия схемы и миграции, журнал запросов в режиме дозаписи, импорт пользователей из CSV с валидацией, резервные копии и восстановление после сбоя.

course
  1. 1База в JSON-файле2099 ₽
  2. 2Загрузка при старте2099 ₽
  3. 3Атомарная запись2099 ₽
  4. 4Версия схемы и миграции2099 ₽
  5. 5Журнал запросов2099 ₽
  6. 6Импорт пользователей из CSV2099 ₽
  7. 7Резервная копия2099 ₽
  8. 8Восстановление после сбоя2099 ₽
  9. Проверка блока2099 ₽

block 18

REST API

Проектируем REST API книжного каталога: ресурсы и методы GET/POST/PUT/PATCH/DELETE, коды 201, 204, 400, 404, 409, валидация тела, фильтры и пагинация в query, версии API, идемпотентный POST по ключу Idempotency-Key и кэширование по ETag.

course
  1. 1Ресурсы и методы2099 ₽
  2. 2Ответы 201 и 2042099 ₽
  3. 3Валидация тела2099 ₽
  4. 4PUT, PATCH и конфликт 4092099 ₽
  5. 5Фильтры и пагинация в query2099 ₽
  6. 6Версии API2099 ₽
  7. 7Идемпотентность POST2099 ₽
  8. 8ETag и кэширование2099 ₽
  9. Проверка блока2099 ₽

block 19

Проект: API магазина

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

course
  1. 1Модели магазина2099 ₽
  2. 2Каркас приложения2099 ₽
  3. 3Регистрация с хешем пароля2099 ₽
  4. 4Вход и токен2099 ₽
  5. 5Каталог с фильтром2099 ₽
  6. 6Корзина и заказ2099 ₽
  7. 7Права администратора2099 ₽
  8. 8Итоговый прогон сценария2099 ₽
  9. Проверка блока2099 ₽

block 20

Итоговый кейс: сервис тормозит

Расследуем инцидент «после релиза сервис тормозит»: перцентили вместо среднего, поиск медленного эндпоинта по логам, N+1 в трассировке и его исправление, индекс вместо перебора, кэш с TTL и hit rate, ошибка 500 в одном обработчике и постмортем.

course
  1. 1Перцентили вместо среднего2099 ₽
  2. 2Медленный эндпоинт по логам2099 ₽
  3. 3N+1 в трассировке2099 ₽
  4. 4Исправляем N+1 пакетным запросом2099 ₽
  5. 5Индекс вместо перебора2099 ₽
  6. 6Кэш с TTL и hit rate2099 ₽
  7. 7Ошибка 500 в одном обработчике2099 ₽
  8. 8Постмортем2099 ₽
  9. Проверка блока2099 ₽