Как fullstack соединяет фронт и бэк: контракты, кодген, сквозные фичи

↑ 9.1 Техлид на бэкенде · ← Предыдущая

Обязательно~3 мин чтенияУровень: senior

Зачем это на собесе

Ценность fullstack-инженера — в стыке: контракты, совместимость и сквозной вертикальный срез.

Объяснение

Точки стыка:

ОбластьПрактика
Контракт APIOpenAPI как источник истины; изменения через ревью схемы; проверка совместимости в CI (oasdiff)
Кодген клиентаиз OpenAPI (openapi-typescript, Orval, Kiota, NSwag) — типы фронта совпадают с бэком
Валидацияодинаковые правила: схема на бэке, зеркальная на фронте (Zod/Valibot генерируется или пишется параллельно)
Ошибкиединый формат (ProblemDetails) и словарь кодов → локализованные сообщения на фронте
АутентификацияOIDC/JWT, refresh, единый провайдер (Keycloak); понимание cookie/CSRF
РеалтаймSignalR/SSE/WebSocket, переподключение и пропущенные события
Пагинация/фильтрысогласованные параметры и типы курсоров
Файлыpre-signed URL, прогресс загрузки
Окруженияконфигурация фронта на этапе выполнения, CORS, проксирование
Наблюдаемостьсквозной trace_id от браузера до БД, RUM (Sentry)
Тестированиеконтрактные тесты, e2e (Playwright) на реальном стенде

Вертикальный срез: фича проходит через все слои сразу (БД → API → UI → тесты → деплой), за флагом, небольшими порциями.

# CI: схема — источник истины
- run: dotnet build && dotnet run --project Api -- --generate-openapi openapi.json
- run: npx oasdiff breaking origin/main:openapi.json openapi.json --fail-on ERR
- run: npx openapi-typescript openapi.json -o web/src/api/schema.d.ts && git diff --exit-code   # кодген актуален

Роль на стыке: объяснять ограничения обеих сторон, находить несогласованности до релиза, вести общий контракт и договорённости.

Нюансы и подводные камни

  • Ручные типы на фронте расходятся с бэком.
  • Ломающие изменения API без совместимости: фронт и бэк деплоятся не одновременно.
  • Дублирование бизнес-правил на фронте и бэке: главная — на бэке, фронт — для UX.
  • Игнорирование обработки ошибок сети и частичных отказов в UI.
  • Различия часовых поясов и форматов дат/чисел.

Практика

  1. Включите генерацию TS-клиента из OpenAPI в CI и сломайте контракт намеренно.
  2. Реализуйте единый обработчик ProblemDetails во фронтенде.
  3. Сделайте сквозную фичу малым вертикальным срезом за флагом.

Вопросы с ответами

Связанные темы