1.7 KiB
1.7 KiB
ADR-005: OpenAPI Codegen with openapi-typescript
Status: Accepted
Date: 2026-06-13
Deciders: Architect, Tech Lead
Context
Frontend должен потреблять API бэкенда. Ручное написание клиентов и DTO приводит к рассинхронизации с бэкендом и ошибкам типизации.
Decision
Использовать openapi-typescript + openapi-fetch для генерации:
- TypeScript типов (DTO, request/response schemas)
- Fetcher клиента (типобезопасные вызовы)
Процесс:
- Backend генерирует OpenAPI spec через
@nestjs/swagger openapi-typescriptна фронте генерирует типыopenapi-fetchсоздаёт типобезопасный HTTP-клиент- Разработчик пишет 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
});
}
Consequences
- Полная типобезопасность на стыке frontend/backend
- Автоматическая синхронизация с API-контрактом
- TanStack Query hooks пишутся вручную — полный контроль staleTime/caching
- Добавляется шаг в CI: codegen при изменении OpenAPI spec