📝 Вопросы на самопроверку
Ответьте на вопросы самостоятельно, затем проверьте себя в разделе Решения. Эти вопросы повторяют темы лекции Summary session 3.
Блок 1: HTTP и REST
Вопрос: HTTP-методы
Для чего нужны HTTP-методы? Перечислите основные методы (GET, POST, PUT, PATCH, DELETE) и укажите, какие из них идемпотентны.
Вопрос: Идемпотентность
Что такое идемпотентность? Почему DELETE считается идемпотентным, а POST — нет?
Вопрос: API vs веб-приложение
В чём разница между API и веб-приложением? Можете ли привести пример, где одно API используется несколькими приложениями?
Вопрос: Принципы RESTful
Назовите 5 ключевых принципов RESTful-архитектуры. Чем RESTful отличается от SOAP?
Блок 2: Flask — конфигурация и маршрутизация
Вопрос: Config-классы
Зачем использовать иерархию Config-классов (Config / DevelopmentConfig / TestingConfig)? Как Flask выбирает нужную конфигурацию через переменную окружения?
Вопрос: Blueprint
Что такое Blueprint и зачем он нужен? Какие преимущества даёт использование Blueprints в крупном проекте?
Вопрос: __init__.py в app/
За что отвечает файл app/__init__.py в проекте Community Pulse? Что такое Application Factory и почему он предпочтительнее прямой инициализации?
Блок 3: Структура проекта
Вопрос: Папки проекта
Опишите назначение каждой папки в Community Pulse: routers/, models/, schemas/. Почему разделение на эти три слоя является хорошей практикой?
Вопрос: Модульная структура
Назовите 4 преимущества модульной структуры проекта (модульность, поддержка и развитие, масштабируемость, переиспользование).
Блок 4: Flask-SQLAlchemy и миграции
Вопрос: Flask-SQLAlchemy
Что такое Flask-SQLAlchemy? Какие преимущества он даёт по сравнению с использованием «чистого» SQLAlchemy?
Вопрос: Alembic vs Flask-Migrate
В чём разница между Alembic и Flask-Migrate? Когда вы бы выбрали один над другим?
Практика: Команды миграции
Запишите последовательность команд для: 1) инициализации миграций, 2) создания первой миграции, 3) применения к БД, 4) отката.
Блок 5: Эндпоинты и Pydantic
Вопрос: Объект request
Перечислите атрибуты объекта request. Чем отличается request.args от request.form? Когда использовать request.get_json()?
Вопрос: Контракты
Что такое контракт между бэкендом и фронтендом? Из каких частей состоит контракт? Зачем он нужен?
Практика: Pydantic-схема
Напишите Pydantic v2 схему QuestionCreate с полем text (строка, минимум 12 символов) и схему QuestionResponse с полями id и text, поддерживающую создание из ORM-объекта.
Итоговый вопрос
Как вы думаете, какие возможности предоставляют Flask, SQLAlchemy и Pydantic вместе? Как можно масштабировать приложение Community Pulse?