2025-10-26 22:30:58 +03:00
|
|
|
|
# API CodeGen
|
|
|
|
|
|
|
|
|
|
|
|
CLI утилита для генерации TypeScript API клиента из OpenAPI спецификации.
|
|
|
|
|
|
|
|
|
|
|
|
## Установка
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
bun install
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## Использование
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
api-codegen -u <URL> -i <INPUT> -o <OUTPUT> [-n <NAME>]
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
**Аргументы:**
|
|
|
|
|
|
- `-u, --url <url>` - Базовый URL API
|
|
|
|
|
|
- `-i, --input <path>` - Путь к OpenAPI файлу (локальный или URL)
|
|
|
|
|
|
- `-o, --output <path>` - Директория для сохранения файлов
|
|
|
|
|
|
- `-n, --name <name>` - Имя сгенерированного файла (опционально)
|
|
|
|
|
|
|
|
|
|
|
|
**Примеры:**
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# Локальный файл
|
|
|
|
|
|
api-codegen -u https://api.example.com -i ./openapi.json -o ./src/api
|
|
|
|
|
|
|
|
|
|
|
|
# URL на спецификацию
|
|
|
|
|
|
api-codegen -u https://api.example.com -i https://petstore.swagger.io/v2/swagger.json -o ./src/api
|
|
|
|
|
|
|
|
|
|
|
|
# С кастомным именем файла
|
|
|
|
|
|
api-codegen -u https://api.example.com -i ./openapi.json -o ./src/api -n MyApiClient
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## Пример использования
|
|
|
|
|
|
|
|
|
|
|
|
```typescript
|
|
|
|
|
|
import { Api, HttpClient } from './src/api/Api';
|
|
|
|
|
|
|
|
|
|
|
|
const httpClient = new HttpClient();
|
|
|
|
|
|
httpClient.setSecurityData({ token: 'jwt-token' });
|
|
|
|
|
|
|
|
|
|
|
|
const api = new Api(httpClient);
|
|
|
|
|
|
|
|
|
|
|
|
// GET запрос
|
|
|
|
|
|
const user = await api.auth.getProfile();
|
|
|
|
|
|
|
|
|
|
|
|
// POST запрос
|
|
|
|
|
|
const result = await api.auth.login({ email, password });
|
|
|
|
|
|
|
|
|
|
|
|
// React + SWR
|
|
|
|
|
|
function Profile() {
|
|
|
|
|
|
const { data } = useSWR('/auth/me', () => api.auth.getProfile());
|
|
|
|
|
|
return <div>{data?.email}</div>;
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
2025-10-28 09:58:44 +03:00
|
|
|
|
## Разработка
|
|
|
|
|
|
|
|
|
|
|
|
### Сборка
|
|
|
|
|
|
```bash
|
|
|
|
|
|
bun run build
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### Тестирование
|
|
|
|
|
|
|
|
|
|
|
|
Проект использует комплексную систему тестирования с максимальным покрытием (~72 тестовых кейса).
|
|
|
|
|
|
|
|
|
|
|
|
**Запуск всех тестов:**
|
|
|
|
|
|
```bash
|
|
|
|
|
|
bun test
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
**Только юнит тесты:**
|
|
|
|
|
|
```bash
|
|
|
|
|
|
bun test:unit
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
**Только интеграционные тесты:**
|
|
|
|
|
|
```bash
|
|
|
|
|
|
bun test:integration
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
**Watch режим:**
|
|
|
|
|
|
```bash
|
|
|
|
|
|
bun test:watch
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
**С coverage:**
|
|
|
|
|
|
```bash
|
|
|
|
|
|
bun test:coverage
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
Подробная документация по тестированию доступна в [`tests/README.md`](tests/README.md).
|
|
|
|
|
|
|
|
|
|
|
|
### Структура тестов
|
|
|
|
|
|
|
|
|
|
|
|
- **Юнит тесты** - CLI, генератор, утилиты, валидация
|
|
|
|
|
|
- **Интеграционные тесты** - E2E генерация, сгенерированный клиент
|
|
|
|
|
|
- **Тестовые фикстуры** - 7 OpenAPI спецификаций для различных сценариев
|
|
|
|
|
|
- **Mock сервер** - для тестирования HTTP запросов
|
|
|
|
|
|
|
|
|
|
|
|
**Покрываемые сценарии:**
|
|
|
|
|
|
- ✅ CLI команды и обработка ошибок
|
|
|
|
|
|
- ✅ Генерация TypeScript кода
|
|
|
|
|
|
- ✅ Компиляция сгенерированного кода
|
|
|
|
|
|
- ✅ HTTP запросы с mock сервером
|
|
|
|
|
|
- ✅ Аутентификация (Bearer tokens)
|
|
|
|
|
|
- ✅ Edge cases (Unicode, большие спецификации)
|
|
|
|
|
|
|
2025-10-26 22:30:58 +03:00
|
|
|
|
## Лицензия
|
|
|
|
|
|
|
|
|
|
|
|
MIT
|