NestJS
Для чего модуль
Освоить NestJS как платформу для устойчивых backend-сервисов: чистая модульность, управляемые зависимости, предсказуемые контракты и надежная эксплуатация.
Результат после прохождения
- Вы проектируете модули и DI-граф без хаоса и циклических зависимостей.
- Вы строите API-слой с понятными контрактами, валидацией и error-handling.
- Вы внедряете security и reliability-паттерны на уровне framework.
- Вы умеете тестировать Nest-сервисы от unit до e2e.
Термины и аббревиатуры
| Термин | Коротко |
|---|---|
DI | Внедрение зависимостей |
Module | Единица организации фич |
Provider | Инжектируемая зависимость |
DTO | Контракт данных API |
Guard | Проверка доступа |
Фокус по грейдам
Junior: понимать базовые механики и объяснять их простыми примерами.Middle: применять тему в продуктовых сценариях с учетом рисков и ограничений.Senior: управлять архитектурными trade-offs, метриками и эволюцией решения.
Как работать с модулем
- Берите один доменный сервис (например, orders/payments/users) и ведите его через все уроки.
- Для каждого решения фиксируйте: риск, компромисс, метрику проверки.
- По итогам урока добавляйте артефакт: схема модулей, контракт ошибок, тестовый набор.
Программа модуля
Урок 1. Модули и DI
Цель: построить архитектуру Nest-сервиса с прозрачными зависимостями и ownership.
Модульные границы
- Feature modules для доменных зон.
- Shared/infrastructure modules с минимальным публичным API.
- Явные зависимости между модулями, без «скрытых shortcuts».
DI как инструмент архитектуры
- Провайдеры описывают контракты, а не concrete реализации.
- Tokens/interfaces помогают изолировать domain от infra.
- Избегайте циклических зависимостей;
forwardRef— исключение, а не стратегия.
Где ломается в проде
- Один «God module» для всего приложения.
- Сервисы связаны напрямую и трудно тестируются.
- Глобальные провайдеры растут без контроля.
Мини-задача (обязательная)
Нарисуйте модульн ую схему вашего сервиса: модули, провайдеры, зависимости, ownership. Отдельно отметьте потенциальные циклы и план устранения.
Что спросит интервьюер: как вы предотвращаете деградацию архитектуры Nest при росте проекта.
Критерий готовности по уроку: вы можете объяснить DI-граф и модульные границы так, чтобы новый разработчик быстро вошел в проект.
Урок 2. API слой и контракты
Цель: сделать внешнее поведение API предсказуемым и устойчивым к изменениям.
Controllers, Pipes, Validation
- Controller только orchestration, бизнес-логика в service/use-case.
- DTO и валидация входа обязательны на boundary.
- Transform/validation pipeline должен быть единообразным по сервису.
Error handling
- Бизнес- и инфраструктурные ошибки разделены.
- Единый error contract (
code,message,traceId,context). - Exception filters для консистентного response format.
Где ломается в проде
- Разные endpoint возвращают разные форматы ошибок.
- Валидация частично в DTO, частично «где-то внутри сервиса».
- Контракт API меняется без deprecation процесса.
Мини-задача (обязательная)
Соберите API contract для 5 типовых ошибок и добавьте пример валидации DTO + mapping в единый error response.
Что спросит интервьюер: как вы отделяете transport-слой от доменной логики в Nest.
Критерий готовности по уроку: вы можете показать API-слой, где ошибки и валидация стандартизированы на уровне всей системы.
Урок 3. Безопасность и доступ
Цель: встроить безопасность в архитектуру сервиса, а не добавлять после инцидента.
Guards и authorization
- AuthN/AuthZ проверяются централизованно.
- Роли и политики доступа отражены в коде прозрачно.
- Критичные операции имеют audit trail.
Interceptors и observability
- Correlation id / trace id проходит через весь запрос.
- Логирование структурированное и безопасное (без секретов).
- Метрики по latency/error rate на уровне endpoint.
Где ломается в проде
- Бизнес-проверки прав размазаны по сервисам.
- Security-логика дублируется и расходится.
- Отсутствует наблюдаемость за критичными действиями.
Мини-задача (обязательная)
Опишите схему защиты для критичного endpoint: аутентификация, авторизация, audit logging, rate limit, error mapping.
Что спросит интервьюер: где в Nest лучше внедрять контроль доступа и почему.
Критерий готовности по уроку: вы можете показать security-контур сервиса и объяснить, какие риски он закрывает.
Урок 4. Надежность и тестирование
Цель: обеспечить предсказуемое качество сервиса при изменениях и релизах.
Уровни тестов
- Unit для бизнес-логики и use-cases.
- Integration для модульных взаимодействий и инфраструктурных границ.
- E2E для критичных сквозных сценариев.
Testability by design
- DI облегчает изоляцию зависимостей.
- Контракты сервисов упрощают мокирование/подмену.
- Тесты покрывают поведение, а не framework internals.
Где ломается в проде
- Тестируют только happy-path.
- E2E-слой нестабилен и игнорируется.
- Нет release-gate по критичным сценариям.
Мини-задача (обязательная)
Покройте один бизнес-flow тремя слоями тестов: unit, integration, e2e. Добавьте негативный сценарий и проверку error contract.
Что спросит интервьюер: как вы строите тестовую стратегию для Nest-сервиса под реальные риски.
Критерий готовности по уроку: вы можете доказать надежность сервиса через тестовую систему и эксплуатационные сигналы.
Практика
- Нарисуйте модульную карту Nest-сервиса с ownership.
- Подготовьте API contract + error schema.
- Опишите security-модель для критичных endpoint.
- Реализуйте тестовый набор (unit/integration/e2e) для ключевого flow.
- Закрепите связкой: Node.js вопросы -> NestJS вопросы -> Базы данных вопросы.
- Проверьте API flow с валидацией и guard-политикой в Песочнице, затем зафиксируйте edge-cases.
Связь с треками и вопросами
- Треки: Middle трек, Senior трек.
- Вопросы: NestJS, Node.js.
- Повторение: 3-5 вопросов без подсказок -> сверка с модулем -> повтор через 24 часа.
Критерий готовности
Вы объясняете Nest-архитектуру через границы, контракты, безопасность и надежность, а не через набор декораторов.
Артефакты после модуля
- Схема модулей Nest с ownership.
- API contract + error schema.
- Security checklist по критичным endpoint.
- Набор тестов и release-checklist для критичного flow.