Навык openapi-codegen
Генерирует типобезопасные API-клиенты и типы TypeScript на основе спецификаций OpenAPI с использованием различных инструментов.
- Звёзды на GitHub
- 47
- Файлы
- 5
- Последний коммит
- 9 нояб. 2026 г.
- Лицензия
- MIT
- Разрешённые инструменты
- 6
Что делает навык openapi-codegen?
openapi-codegen — это Agent Skill. Генерирует типобезопасные API-клиенты и типы TypeScript на основе спецификаций OpenAPI с использованием различных инструментов.
Сводка сгенерирована из SKILL.md навыка.
О skill openapi-codegen
Основная функция этого SKILL — генерация типобезопасных API-клиентов и определений TypeScript на основе спецификаций OpenAPI. Он предназначен для разработчиков, которым необходимо синхронизировать фронтенд или клиентский код с контрактами бэкенд API для предотвращения ошибок во время выполнения. SKILL предоставляет доступ к нескольким специализированным инструментам, включая openapi-typescript для легковесной генерации типов, openapi-generator-cli для создания полноценных клиентов на базе fetch или axios, а также swagger-typescript-api для генерации на основе настраиваемых шаблонов.
Агенту следует загрузить этот SKILL, когда пользователь запрашивает генерацию API-клиента, создание типов из схемы OpenAPI или преобразование tRPC роутера в документ OpenAPI с помощью trpc-openapi. Он использует bash-команды и инструменты файловой системы для установки зависимостей, запуска скриптов генерации и записи полученного кода в директорию проекта. Особенность этого SKILL заключается в том, что он фокусируется именно на преобразовании существующих спецификаций в готовый код, а не на создании самих спецификаций.
Что агент может делать с ним
- 1Генерация типов TypeScriptСоздание легковесных определений TypeScript из YAML-файла OpenAPI без добавления накладных расходов во время выполнения.
- 2Создание полноценных API-клиентовСоздание полной реализации API-клиента на базе fetch или axios на основе спецификации OpenAPI.
- 3Экспорт tRPC в OpenAPIПреобразование tRPC роутера в документ OpenAPI, чтобы внешние потребители могли взаимодействовать с API.
- 4Автоматизация генерации клиентовНастройка рабочего процесса для автоматической перегенерации типов API при каждом изменении файла спецификации OpenAPI.
Написано на основе skill SKILL.md. Каждый сценарий использования проверен по цитате из него.
Как установить навык openapi-codegen
Каждая команда копирует папку навыка в каталог навыков клиента. Перезапустите клиент или начните новую сессию, чтобы загрузить его.Установка навыка openapi-codegen в Claude Code
~/.claude/skills/openapi-codegen/SKILL.md
$ npx degit claude-dev-suite/claude-dev-suite/skills/api-integration/openapi-codegen ~/.claude/skills/openapi-codegenУстановка навыка openapi-codegen в Claude Code (project)
.claude/skills/openapi-codegen/SKILL.md
$ npx degit claude-dev-suite/claude-dev-suite/skills/api-integration/openapi-codegen .claude/skills/openapi-codegenУстановка навыка openapi-codegen в Codex
~/.agents/skills/openapi-codegen/SKILL.md
$ npx degit claude-dev-suite/claude-dev-suite/skills/api-integration/openapi-codegen ~/.agents/skills/openapi-codegenУстановка навыка openapi-codegen в Gemini CLI
~/.gemini/skills/openapi-codegen/SKILL.md
$ npx degit claude-dev-suite/claude-dev-suite/skills/api-integration/openapi-codegen ~/.gemini/skills/openapi-codegenУстановка навыка openapi-codegen в Claude.ai
npx degit claude-dev-suite/claude-dev-suite/skills/api-integration/openapi-codegen openapi-codegen && zip -r openapi-codegen.zip openapi-codegen # claude.ai → Customize → Skills → + → Create skill → Upload a skill → openapi-codegen.zip
Автоматические проверки
Запущено 15 нояб. 2026 г.Полный отчёт →Ещё не проверен. Навыку нужно 80 баллов, ни одной серьёзной находки и достаточно данных для проверки. Как работают проверки · Что исправить, чтобы получить больше баллов
- Связанный и доступный исходный репозиторийclaude-dev-suite/claude-dev-suite/skills/api-integration/openapi-codegen is public and reachablegithub.com/claude-dev-suite/claude-dev-suite/tree/HEAD/skill ↗Пройдено
- Open source лицензия (OSI)MITspdx.org/licenses/MIT.html ↗Пройдено
- Коммит или релиз за последний годLast commit 2026-11-09github.com/claude-dev-suite/claude-dev-suite/commits ↗Пройдено
- В скриптах нет загрузки с запуском и кражи учётных данныхNo scripts in the skill folderПройдено
- В SKILL.md нет скрытых инструкцийNo override phrases, safeguard switches, credential requests or hidden charactersgithub.com/claude-dev-suite/claude-dev-suite/blob/HEAD/skill ↗Пройдено
- Заранее разрешённые инструменты ограниченыBash lets the agent run any shell command without askinggithub.com/claude-dev-suite/claude-dev-suite/blob/HEAD/skill ↗Проблема
- SKILL.md соответствует формату Agent SkillsValid name and description; says when to use it; 429 linesgithub.com/claude-dev-suite/claude-dev-suite/blob/HEAD/skill ↗Пройдено
SKILL.md
Открыть на GitHubOpenAPI Code Generation Core Knowledge
Deep Knowledge: Use
mcp__documentation__fetch_docswith technology:openapi-codegenfor comprehensive documentation.
openapi-typescript (Types Only)
Generates TypeScript types from OpenAPI schemas. Lightweight, no runtime.
# Installation
npm install -D openapi-typescript
# Generate types
npx openapi-typescript ./openapi.yaml -o ./src/types/api.ts
npx openapi-typescript https://api.example.com/openapi.json -o ./src/types/api.ts
Generated Types Usage
import type { paths, components } from './types/api';
// Schema types
type User = components['schemas']['User'];
type CreateUserDto = components['schemas']['CreateUserDto'];
// Request/Response types
type CreateUserRequest = paths['/users']['post']['requestBody']['content']['application/json'];
type UserResponse = paths['/users/{id}']['get']['responses']['200']['content']['application/json'];
type UsersListResponse = paths['/users']['get']['responses']['200']['content']['application/json'];
// Path parameters
type UserPathParams = paths['/users/{id}']['get']['parameters']['path'];
With openapi-fetch
import createClient from 'openapi-fetch';
import type { paths } from './types/api';
const client = createClient<paths>({
baseUrl: 'https://api.example.com',
});
// Fully typed requests
const { data, error } = await client.GET('/users/{id}', {
params: { path: { id: '123' } },
});
const { data } = await client.POST('/users', {
body: { name: 'John', email: 'john@example.com' },
});
// Query parameters
const { data } = await client.GET('/users', {
params: { query: { status: 'active', page: 1 } },
});
openapi-generator-cli (Full Client)
Generates complete API clients with fetch/axios implementations.
# Installation
npm install -D @openapitools/openapi-generator-cli
# Generate TypeScript Fetch client
npx @openapitools/openapi-generator-cli generate \
-i openapi.yaml \
-g typescript-fetch \
-o ./src/api-client
# Generate TypeScript Axios client
npx @openapitools/openapi-generator-cli generate \
-i openapi.yaml \
-g typescript-axios \
-o ./src/api-client
Configuration File
# openapitools.json
{
"$schema": "https://raw.githubusercontent.com/OpenAPITools/openapi-generator-cli/master/apps/generator-cli/src/config.schema.json",
"spaces": 2,
"generator-cli": {
"version": "7.0.0",
"generators": {
"typescript-client": {
"generatorName": "typescript-fetch",
"output": "#{cwd}/src/api-client",
"inputSpec": "#{cwd}/openapi.yaml",
"additionalProperties": {
"supportsES6": true,
"npmName": "@myorg/api-client",
"typescriptThreePlus": true,
"withInterfaces": true
}
}
}
}
}
Generated Client Usage
import { Configuration, UsersApi } from './api-client';
const config = new Configuration({
basePath: 'https://api.example.com',
accessToken: () => localStorage.getItem('token') || '',
});
const usersApi = new UsersApi(config);
// Typed API calls
const users = await usersApi.listUsers({ status: 'active' });
const user = await usersApi.getUserById({ id: '123' });
const newUser = await usersApi.createUser({
createUserDto: { name: 'John', email: 'john@example.com' },
});
swagger-typescript-api
Fast, customizable generator with template support.
# Installation
npm install -D swagger-typescript-api
# Generate
npx swagger-typescript-api -p ./openapi.yaml -o ./src/api -n api.ts
Configuration
npx swagger-typescript-api \
-p ./openapi.yaml \
-o ./src/api \
-n api.ts \
--axios \ # Use axios instead of fetch
--modular \ # Separate files per tag
--route-types \ # Generate route types
--extract-request-body \ # Extract request body types
--extract-response-body # Extract response body types
Generated Client Usage
import { Api } from './api/api';
const api = new Api({
baseUrl: 'https://api.example.com',
securityWorker: () => ({
headers: { Authorization: `Bearer ${getToken()}` },
}),
});
// Typed API calls
const users = await api.users.usersList({ status: 'active' });
const user = await api.users.usersDetail('123');
const newUser = await api.users.usersCreate({
name: 'John',
email: 'john@example.com',
});
trpc-openapi (Export tRPC as OpenAPI)
Generate OpenAPI spec from tRPC router. Useful for external API consumers.
npm install trpc-openapi
Define OpenAPI Endpoints
import { initTRPC } from '@trpc/server';
import { OpenApiMeta } from 'trpc-openapi';
import { z } from 'zod';
const t = initTRPC.meta<OpenApiMeta>().create();
export const appRouter = t.router({
getUser: t.procedure
.meta({
openapi: {
method: 'GET',
path: '/users/{id}',
tags: ['users'],
summary: 'Get user by ID',
},
})
.input(z.object({ id: z.string() }))
.output(z.object({
id: z.string(),
name: z.string(),
email: z.string(),
}))
.query(({ input }) => getUserById(input.id)),
createUser: t.procedure
.meta({
openapi: {
method: 'POST',
path: '/users',
tags: ['users'],
summary: 'Create a new user',
},
})
.input(z.object({
name: z.string(),
email: z.string().email(),
}))
.output(z.object({
id: z.string(),
name: z.string(),
email: z.string(),
}))
.mutation(({ input }) => createUser(input)),
});
Generate OpenAPI Document
import { generateOpenApiDocument } from 'trpc-openapi';
import { appRouter } from './router';
const openApiDocument = generateOpenApiDocument(appRouter, {
title: 'My API',
version: '1.0.0',
baseUrl: 'https://api.example.com',
});
// Save to file
import fs from 'fs';
fs.writeFileSync('./openapi.json', JSON.stringify(openApiDocument, null, 2));
REST Handler
import { createOpenApiNextHandler } from 'trpc-openapi';
import { appRouter } from './router';
// Next.js API route: pages/api/[...trpc].ts
export default createOpenApiNextHandler({
router: appRouter,
createContext: () => ({}),
});
Production Readiness
CI/CD Integration
# .github/workflows/generate-client.yml
name: Generate API Client
on:
push:
paths:
- 'openapi.yaml'
jobs:
generate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
- name: Install dependencies
run: npm ci
- name: Generate types
run: npx openapi-typescript ./openapi.yaml -o ./src/types/api.ts
- name: Check for changes
id: check
run: |
if git diff --quiet src/types/api.ts; then
echo "changed=false" >> $GITHUB_OUTPUT
else
echo "changed=true" >> $GITHUB_OUTPUT
fi
- name: Commit and push
if: steps.check.outputs.changed == 'true'
run: |
git config --local user.email "bot@example.com"
git config --local user.name "API Generator Bot"
git add src/types/api.ts
git commit -m "chore: regenerate API types"
git push
Package Scripts
{
"scripts": {
"generate:types": "openapi-typescript ./openapi.yaml -o ./src/types/api.ts",
"generate:client": "openapi-generator-cli generate -c openapitools.json",
"generate:all": "npm run generate:types && npm run generate:client",
"precommit": "npm run generate:types && git add src/types/api.ts"
}
}
Watch Mode Development
# openapi-typescript with watch
npx openapi-typescript ./openapi.yaml -o ./src/types/api.ts --watch
# Or use nodemon
npx nodemon --watch openapi.yaml --exec "npx openapi-typescript ./openapi.yaml -o ./src/types/api.ts"
Validation Before Generation
# Validate spec first
npx @redocly/cli lint openapi.yaml
# Then generate
npx openapi-typescript ./openapi.yaml -o ./src/types/api.ts
Monitoring Metrics
| Metric | Target |
|---|---|
| Generated type coverage | 100% of endpoints |
| Build time with generation | < 30s |
| Type errors after generation | 0 |
| Spec validation errors | 0 |
Checklist
- OpenAPI spec validation in CI
- Automated type generation on spec changes
- Generated code committed or gitignored
- Version pinned for generator CLI
- Custom templates documented
- API client initialization documented
- Error handling patterns documented
- Authentication setup in client
- Breaking change detection
- Generated code tested
When NOT to Use This Skill
- Writing OpenAPI specifications (use
openapiskill) - GraphQL type generation (use
graphql-codegenskill) - tRPC type-safe APIs (use
trpcskill) - Manual API client implementation
- Simple APIs where manual types suffice
Anti-Patterns
| Anti-Pattern | Why It's Bad | Solution |
|---|---|---|
| Committing generated code to git | Merge conflicts, stale code | Add to .gitignore, generate in CI/build |
| Not versioning generator CLI | Inconsistent output | Pin generator versions in package.json |
| Editing generated files manually | Changes lost on regeneration | Extend or wrap generated code |
| No validation before generation | Invalid types generated | Validate spec with @redocly/cli first |
| Using different generators across team | Type inconsistencies | Standardize on one generator |
| Generating from remote spec without caching | Slow builds, network dependency | Cache spec locally or use schema registry |
| Not updating on spec changes | Type/runtime mismatch | Run generation in CI on spec updates |
| Missing error handling in generated code | Poor error UX | Wrap generated client with error handling |
Quick Troubleshooting
| Issue | Possible Cause | Solution |
|---|---|---|
| Generation fails | Invalid OpenAPI spec | Validate with @redocly/cli lint |
| Type errors after generation | Spec doesn't match API | Verify spec matches actual responses |
| Missing types | Spec incomplete or refs broken | Check all $refs resolve, add missing schemas |
| Wrong HTTP client generated | Generator config mismatch | Check -g flag or generator setting |
| Circular reference errors | Self-referencing schemas | Use discriminators or flatten schema |
| Slow generation | Large spec file | Use spec splitting or partial generation |
| Auth not working | Security scheme not configured | Add securityWorker or token config |
| "Cannot find module" errors | Generation didn't complete | Check for generation errors, rerun |
| Type conflicts | Multiple generators running | Use single generator, remove others |
Reference Documentation
Файлы в этом навыке
5Вопросы о навыке openapi-codegen
Как установить навык openapi-codegen в Claude Code?
Выполните npx degit claude-dev-suite/claude-dev-suite/skills/api-integration/openapi-codegen ~/.claude/skills/openapi-codegen. Claude Code загружает навыки из ~/.claude/skills (все проекты) или .claude/skills (один проект) и использует навык, когда его описание соответствует задаче.
Какие клиенты могут использовать навык openapi-codegen?
Любой клиент, который читает формат Agent Skills: Claude Code, Codex, Gemini CLI и claude.ai (загрузить как ZIP). Скрипты в навыке выполняются только там, где клиент разрешает выполнение кода.
Какие инструменты поддерживает этот SKILL?
Он поддерживает openapi-typescript, openapi-generator-cli, swagger-typescript-api и trpc-openapi.
Могу ли я использовать его для написания спецификаций OpenAPI?
Нет, для написания спецификаций следует использовать SKILL 'openapi'; этот SKILL предназначен именно для генерации клиентского кода.
Как проверить валидность спецификации OpenAPI перед генерацией кода?
Вы можете проверить свою спецификацию с помощью команды lint из @redocly/cli.
Что делать, если после генерации возникли ошибки типизации?
Убедитесь, что ваша спецификация соответствует реальным ответам API.