Claude-skill-registry api-codegen
API client code generation workflow. Use when modifying backend routes, response schemas, or request models. Automatically regenerates TypeScript API client from OpenAPI schema.
install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/api-codegen" ~/.claude/skills/majiayu000-claude-skill-registry-api-codegen && rm -rf "$T"
manifest:
skills/data/api-codegen/SKILL.mdsource content
API Client Code Generation
This skill manages the workflow for keeping the frontend TypeScript API client in sync with the backend.
When to use this skill
- After modifying Litestar routes in
backend/app/ - After changing request/response schemas (msgspec)
- After adding new API endpoints
- When frontend TypeScript errors mention missing types
- Before committing changes that affect the API contract
Quick Command
make codegen # Generate TypeScript API client from backend OpenAPI schema
Complete Workflow
-
Modify backend (routes, schemas, endpoints)
- Edit Litestar route handlers in
backend/app/server/ - Update msgspec schemas in
backend/app/domain/*/schemas.py - Add new endpoints or modify existing ones
- Edit Litestar route handlers in
-
Generate API client
make codegenThis will:
- Start the backend server temporarily
- Fetch OpenAPI schema from
/schema/openapi.json - Generate TypeScript client in
frontend/src/openapi/ - Stop the backend server
-
Verify generation
- Check
for new typesfrontend/src/openapi/ - Review generated request/response interfaces
- Look for any generation warnings
- Check
-
Update frontend code
- Import new types from
@/openapi - Use generated API client methods
- Fix any TypeScript errors
- Import new types from
-
Type check
make check-frontend # Verify TypeScript compilation
What Gets Generated
The codegen process creates:
- Type definitions: Request/response interfaces
- API client methods: Type-safe API calls
- Enums and constants: From backend schemas
- Path parameters: Type-safe route params
Location:
frontend/src/openapi/
Example Usage
Backend Schema (msgspec)
# backend/app/domain/users/schemas.py from msgspec import Struct class UserCreateRequest(Struct): email: str name: str class UserResponse(Struct): id: int email: str name: str created_at: str
Generated TypeScript
// frontend/src/openapi/models.ts export interface UserCreateRequest { email: string; name: string; } export interface UserResponse { id: number; email: string; name: string; created_at: string; }
Frontend Usage
import { api } from '@/openapi'; import type { UserCreateRequest, UserResponse } from '@/openapi'; const createUser = async (data: UserCreateRequest): Promise<UserResponse> => { const response = await api.users.create(data); return response; };
Troubleshooting
Generation fails
- Backend not starting: Check for syntax errors in Python code
- Port 8000 in use: Stop existing backend process
- OpenAPI schema errors: Verify all route handlers have proper schemas
Types missing after generation
- Endpoint not in OpenAPI: Ensure route is registered in Litestar app
- Schema not exported: Check msgspec Struct definitions
- Route tags: Verify API grouping/tagging
Frontend TypeScript errors after codegen
- Incompatible changes: Breaking API changes require frontend updates
- Missing imports: Update imports to use new generated types
- Deprecated types: Remove references to old type names
Best Practices
- Run codegen frequently: After any backend schema changes
- Commit generated files: Include
in commitsfrontend/src/openapi/ - Review changes: Check git diff for generated code changes
- Type safety: Let TypeScript catch API contract mismatches
- Breaking changes: Coordinate with frontend team for major API changes
Integration with Development Workflow
Making API Changes
- Modify backend route/schema
- Run
make codegen - Update frontend code to use new types
- Run
make check-frontend - Test changes locally
- Commit all changes together (backend + frontend + generated)
Before Pull Request
make codegen # Regenerate API client make check-all # Type check everything make test # Run backend tests
This ensures the API contract is in sync across the full stack.