Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
직접 명령은 검토 Prompt를 거치지 않습니다. 실행하기 전에 소스를 확인하세요.
npx skills add https://github.com/tools-only/X-Skills --skill generate-sdk명령은 한 줄로 유지됩니다. 복사하기 전에 가로로 스크롤해 전체 내용을 확인하세요.
로컬 사본을 원하시나요? SkillsMP에서 현재 제공할 수 있는 파일을 다운로드하세요.
SOC 직업 분류 기준
SKILL.md 표시 중
| name | generate-sdk |
| description | Generate client SDKs from OpenAPI specs |
| shortcut | sdk |
Automatically generate type-safe, production-ready client SDKs from OpenAPI/Swagger specifications for multiple programming languages with comprehensive features and documentation.
Use /generate-sdk when you need to:
DON'T use this when:
This command implements OpenAPI Generator as the primary approach because:
Alternative considered: Swagger Codegen
Alternative considered: Custom generators
Before running this command:
Ensure your OpenAPI spec is complete, valid, and includes all necessary details.
Set language-specific options like package names, versions, and dependencies.
Run the generator for each target language with customized templates.
Implement additional features like retry logic, caching, or specialized authentication.
Create distribution packages for each language's package manager.
The command generates:
sdks/javascript/ - Node.js/Browser SDK with TypeScript definitionssdks/python/ - Python SDK with type hintssdks/java/ - Java SDK with Maven/Gradle supportsdks/go/ - Go SDK with modulesdocs/sdk-usage.md - Usage documentation for all SDKsexamples/ - Working examples for each language# openapi.yaml
openapi: 3.0.0
info:
title: E-commerce API
version: 1.0.0
servers:
- url: https://api.example.com/v1
paths:
/products:
get:
operationId: listProducts
parameters:
- name: category
in: query
schema:
type: string
- name: limit
in: query
schema:
type: integer
default: 20
responses:
'200':
description: Product list
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Product'
/products/{productId}:
get:
# Generate TypeScript SDK
npx @openapitools/openapi-generator-cli generate \
-i openapi.yaml \
-g typescript-axios \
-o ./sdks/typescript \
--additional-properties=\
npmName=@company/api-client,\
npmVersion=1.0.0,\
supportsES6=true,\
withInterfaces=true
// sdks/typescript/src/index.ts (generated)
import { Configuration, ProductsApi } from '@company/api-client';
// Enhanced configuration with retry and interceptors
export class ApiClient {
private config: Configuration;
private productsApi: ProductsApi;
private retryConfig = {
retries: 3,
retryDelay: 1000,
retryCondition: (error: any) => {
return error.response?.status >= 500;
}
};
constructor(apiKey?: string, basePath?: string) {
this.config = new Configuration({
basePath: basePath || 'https://api.example.com/v1',
accessToken: apiKey,
baseOptions: {
timeout: 10000,
headers: {
'User-Agent': '@company/api-client/1.0.0'
}
}
});
this.productsApi = (.);
.();
}
() {
... = [
{
.(, { data, headers });
data;
}
];
... = {
status >= && status < ;
};
}
(?: {
?: ;
?: ;
}): <[]> {
{
response = .(
..(
options?.,
options?.
)
);
response.;
} (error) {
.(error);
error;
}
}
(: ): <> {
{
response = .(
..(productId)
);
response.;
} (error) {
.(error);
error;
}
}
withRetry<T>(
: <T>,
retriesLeft = ..
): <T> {
{
();
} (error) {
(retriesLeft > && ..(error)) {
.(..);
.(fn, retriesLeft - );
}
error;
}
}
(: ): <> {
( (resolve, ms));
}
() {
(error.) {
.(, {
: error..,
: error..
});
} (error.) {
.(, error.);
} {
.(, error.);
}
}
}
client = ();
products = client.({
: ,
:
});
product = client.();
# Generate Python SDK
openapi-generator-cli generate \
-i openapi.yaml \
-g python \
-o ./sdks/python \
--additional-properties=\
packageName=company_api,\
packageVersion=1.0.0,\
projectName=company-api-client
# sdks/python/company_api/enhanced_client.py
import time
import logging
from typing import Optional, Dict, Any, List
from functools import wraps
import requests
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry
from company_api import Configuration, ApiClient
from company_api.api import ProductsApi
from company_api.models import Product
logger = logging.getLogger(__name__)
def retry_on_failure(max_retries=3, delay=1):
"""Decorator for retrying failed API calls."""
def decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
last_exception = None
for attempt in range(max_retries):
try:
return func(*args, **kwargs)
except Exception as e:
last_exception = e
if attempt < max_retries - 1:
wait_time = delay * (2 ** attempt)
logger.warning(
)
time.sleep(wait_time)
:
logger.error()
last_exception
wrapper
decorator
:
():
config = Configuration()
config.host = base_url
api_key:
config.api_key[] = api_key
config.api_key_prefix[] =
session = requests.Session()
retry_strategy = Retry(
total=max_retries,
backoff_factor=,
status_forcelist=[, , , , ],
)
adapter = HTTPAdapter(
max_retries=retry_strategy,
pool_connections=,
pool_maxsize=
)
session.mount(, adapter)
session.mount(, adapter)
.api_client = ApiClient(configuration=config)
.api_client.rest_client.session = session
.products_api = ProductsApi(.api_client)
.timeout = timeout
._cache: [, ] = {}
() -> [Product]:
cache_key =
use_cache cache_key ._cache:
logger.info()
._cache[cache_key]
:
response = .products_api.list_products(
category=category,
limit=limit,
_request_timeout=.timeout
)
use_cache:
._cache[cache_key] = response
logger.info()
response
Exception e:
logger.error()
() -> Product:
cache_key =
use_cache cache_key ._cache:
logger.info()
._cache[cache_key]
:
response = .products_api.get_product(
product_id=product_id,
_request_timeout=.timeout
)
use_cache:
._cache[cache_key] = response
logger.info()
response
Exception e:
logger.error()
():
pattern:
keys_to_remove = [
k k ._cache.keys()
pattern k
]
key keys_to_remove:
._cache[key]
logger.info()
:
._cache.clear()
logger.info()
__name__ == :
logging.basicConfig(level=logging.INFO)
client = EnhancedApiClient(
api_key=,
timeout=,
max_retries=
)
products = client.list_products(
category=,
limit=,
use_cache=
)
()
product = client.get_product()
()
#!/bin/bash
# generate-all-sdks.sh
SPEC_FILE="openapi.yaml"
OUTPUT_DIR="./sdks"
VERSION="1.0.0"
# Validate OpenAPI spec first
echo "Validating OpenAPI specification..."
npx @stoplight/spectral-cli lint $SPEC_FILE
if [ $? -ne 0 ]; then
echo "OpenAPI spec validation failed"
exit 1
fi
# Generate TypeScript SDK
echo "Generating TypeScript SDK..."
npx @openapitools/openapi-generator-cli generate \
-i $SPEC_FILE \
-g typescript-axios \
-o $OUTPUT_DIR/typescript \
--additional-properties=\
npmName=@company/api-client,\
npmVersion=$VERSION,\
supportsES6=true,\
withInterfaces=true
# Generate Python SDK
echo "Generating Python SDK..."
openapi-generator-cli generate \
-i $SPEC_FILE \
-g python \
-o $OUTPUT_DIR/python \
--additional-properties=\
packageName=company_api,\
packageVersion=$VERSION
# Generate Java SDK
echo "Generating Java SDK..."
openapi-generator-cli generate \
-i $SPEC_FILE \
-g java \
-o $OUTPUT_DIR/java \
--additional-properties=\
groupId=com.company,\
artifactId=api-client,\
artifactVersion=$VERSION,\
library=okhttp-gson
# Generate Go SDK
echo "Generating Go SDK..."
openapi-generator-cli generate \
-i $SPEC_FILE \
-g go \
-o $OUTPUT_DIR/go \
--additional-properties=\
packageName=company,\
packageVersion=
lang typescript python java go;
>> /README.md
>> /README.md
| Error | Cause | Solution |
|---|---|---|
| "Invalid OpenAPI spec" | Malformed specification | Validate with Spectral or similar tools |
| "Unsupported feature" | Generator limitation | Check generator documentation for support |
| "Template error" | Custom template issues | Review template syntax and variables |
| "Version conflict" | Dependency issues | Update generator and dependencies |
| "Generation failed" | Missing required fields | Ensure all required spec fields are present |
Generator Options
library: HTTP client library to usedateLibrary: Date handling libraryuseSingleRequestParameter: Bundle parametersnullableFields: Generate nullable typesenumUnknownDefaultCase: Handle unknown enumsLanguage-Specific Options
npmRepository, withoutPrefixEnumspackageUrl, useNose, asyncioserializationLibrary, useRuntimeExceptionisGoSubmodule, structPrefixDO:
DON'T:
/api-documentation-generator - Generate API docs/api-contract-generator - Create OpenAPI specs/api-testing-framework - Test SDKs/api-versioning-manager - Handle API versions