moex-vibe/apps/docs/docs/adr/ADR-005-openapi-codegen-frontend.md
Sergey Krylov 106467e5c4
All checks were successful
CI / lint (pull_request) Successful in 2m8s
CI / test (pull_request) Successful in 1m57s
CI / build (pull_request) Successful in 2m5s
CI / lint (push) Successful in 2m1s
CI / test (push) Successful in 1m51s
CI / build (push) Successful in 2m9s
docs: translate docs to russian
2026-06-16 05:13:34 +03:00

1.7 KiB
Raw Blame History

ADR-005: OpenAPI codegen через openapi-typescript

Статус: Accepted
Дата: 2026-06-13
Участники решения: Architect, Tech Lead

Контекст

Frontend должен потреблять API бэкенда. Ручное написание клиентов и DTO приводит к рассинхронизации с бэкендом и ошибкам типизации.

Решение

Использовать openapi-typescript + openapi-fetch для генерации:

  • TypeScript типов (DTO, request/response schemas)
  • Fetcher клиента (типобезопасные вызовы)

Процесс:

  1. Backend генерирует OpenAPI spec через @nestjs/swagger
  2. openapi-typescript на фронте генерирует типы
  3. openapi-fetch создаёт типобезопасный HTTP-клиент
  4. Разработчик пишет TanStack Query hooks вручную поверх сгенерированного клиента
// Пример: типобезопасный хук
import { getSharesSecid } from '@/api/client';
import type { components } from '@/api/types';

export function useStock(secid: string) {
  return useQuery({
    queryKey: ['stock', secid],
    queryFn: () => getSharesSecid(secid),
    staleTime: 900_000, // 15 min
  });
}

Последствия

  • Полная типобезопасность на стыке frontend/backend
  • Автоматическая синхронизация с API-контрактом
  • TanStack Query hooks пишутся вручную — полный контроль staleTime/caching
  • Добавляется шаг в CI: codegen при изменении OpenAPI spec