mirror of
https://github.com/duthaho/claudekit.git
synced 2026-06-14 06:04:57 +03:00
feat: add verification methodology and writing plans skills
This commit is contained in:
@@ -0,0 +1,422 @@
|
||||
---
|
||||
title: /api-gen
|
||||
description: Generate API endpoints, documentation, or client code from specifications
|
||||
---
|
||||
|
||||
# /api-gen
|
||||
|
||||
## Purpose
|
||||
|
||||
Generate API endpoints, documentation, or client code from specifications. Accelerates API development by creating boilerplate code, OpenAPI specs, and client SDKs.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
/api-gen [resource-name-or-spec]
|
||||
```
|
||||
|
||||
## Arguments
|
||||
|
||||
- **resource-name-or-spec**:
|
||||
- Resource name: `User`, `Order`, `Product` - Generate CRUD API
|
||||
- OpenAPI spec path: `openapi.yaml` - Generate from specification
|
||||
- Description: `"User management API"` - Generate from description
|
||||
|
||||
## Workflow
|
||||
|
||||
### Step 1: Define Resource
|
||||
|
||||
1. **Identify resource properties**
|
||||
- Field names and types
|
||||
- Required vs optional
|
||||
- Validation rules
|
||||
|
||||
2. **Define relationships**
|
||||
- One-to-many
|
||||
- Many-to-many
|
||||
- Foreign keys
|
||||
|
||||
3. **Determine operations**
|
||||
- CRUD operations needed
|
||||
- Custom endpoints
|
||||
- Business logic
|
||||
|
||||
### Step 2: Generate Code
|
||||
|
||||
1. **Create model/schema**
|
||||
- Database model
|
||||
- Validation schema
|
||||
- Type definitions
|
||||
|
||||
2. **Create routes/endpoints**
|
||||
- HTTP methods
|
||||
- Path parameters
|
||||
- Request/response handling
|
||||
|
||||
3. **Add validation**
|
||||
- Input validation
|
||||
- Type checking
|
||||
- Error handling
|
||||
|
||||
4. **Generate tests**
|
||||
- Endpoint tests
|
||||
- Validation tests
|
||||
- Error case tests
|
||||
|
||||
### Step 3: Document
|
||||
|
||||
1. **Create OpenAPI spec**
|
||||
- Endpoint descriptions
|
||||
- Request/response schemas
|
||||
- Authentication
|
||||
|
||||
2. **Add examples**
|
||||
- Request examples
|
||||
- Response examples
|
||||
- cURL commands
|
||||
|
||||
3. **Document errors**
|
||||
- Error codes
|
||||
- Error messages
|
||||
- Resolution steps
|
||||
|
||||
## Examples
|
||||
|
||||
### Generate CRUD API for Resource
|
||||
|
||||
```bash
|
||||
/api-gen User
|
||||
```
|
||||
|
||||
Creates:
|
||||
- `src/models/user.ts` - Data model
|
||||
- `src/routes/user.ts` - API routes
|
||||
- `src/controllers/user.ts` - Business logic
|
||||
- `tests/user.test.ts` - Test suite
|
||||
- `docs/api/user.md` - API documentation
|
||||
|
||||
### Generate from OpenAPI Spec
|
||||
|
||||
```bash
|
||||
/api-gen openapi.yaml
|
||||
```
|
||||
|
||||
Generates code matching the specification.
|
||||
|
||||
### Generate with Description
|
||||
|
||||
```bash
|
||||
/api-gen "Product catalog API with categories and tags"
|
||||
```
|
||||
|
||||
Creates API based on natural language description.
|
||||
|
||||
## Output
|
||||
|
||||
```markdown
|
||||
## API Generated: User Management
|
||||
|
||||
### Endpoints Created
|
||||
|
||||
| Method | Path | Description |
|
||||
|--------|------|-------------|
|
||||
| GET | /api/users | List all users |
|
||||
| POST | /api/users | Create new user |
|
||||
| GET | /api/users/:id | Get user by ID |
|
||||
| PUT | /api/users/:id | Update user |
|
||||
| DELETE | /api/users/:id | Delete user |
|
||||
| GET | /api/users/:id/posts | Get user's posts |
|
||||
|
||||
### Files Created
|
||||
|
||||
#### Model
|
||||
- `src/models/user.ts`
|
||||
```typescript
|
||||
export interface User {
|
||||
id: string;
|
||||
email: string;
|
||||
name: string;
|
||||
createdAt: Date;
|
||||
updatedAt: Date;
|
||||
}
|
||||
|
||||
export const UserSchema = z.object({
|
||||
email: z.string().email(),
|
||||
name: z.string().min(1).max(100),
|
||||
});
|
||||
```
|
||||
|
||||
#### Routes
|
||||
- `src/routes/user.ts`
|
||||
```typescript
|
||||
router.get('/users', listUsers);
|
||||
router.post('/users', validateBody(UserSchema), createUser);
|
||||
router.get('/users/:id', getUser);
|
||||
router.put('/users/:id', validateBody(UserSchema), updateUser);
|
||||
router.delete('/users/:id', deleteUser);
|
||||
```
|
||||
|
||||
#### Controller
|
||||
- `src/controllers/user.ts`
|
||||
```typescript
|
||||
export async function createUser(req, res) {
|
||||
const user = await db.user.create({
|
||||
data: req.body,
|
||||
});
|
||||
res.status(201).json(user);
|
||||
}
|
||||
// ... other handlers
|
||||
```
|
||||
|
||||
#### Tests
|
||||
- `tests/user.test.ts`
|
||||
```typescript
|
||||
describe('User API', () => {
|
||||
it('should create user', async () => {
|
||||
const res = await request(app)
|
||||
.post('/api/users')
|
||||
.send({ email: 'test@example.com', name: 'Test' });
|
||||
expect(res.status).toBe(201);
|
||||
expect(res.body).toHaveProperty('id');
|
||||
});
|
||||
});
|
||||
```
|
||||
|
||||
#### Documentation
|
||||
- `docs/api/user.md` - Full API documentation
|
||||
|
||||
### OpenAPI Specification
|
||||
|
||||
Generated `openapi.yaml`:
|
||||
```yaml
|
||||
openapi: 3.0.0
|
||||
info:
|
||||
title: User API
|
||||
version: 1.0.0
|
||||
paths:
|
||||
/api/users:
|
||||
get:
|
||||
summary: List all users
|
||||
responses:
|
||||
'200':
|
||||
description: Success
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: array
|
||||
items:
|
||||
$ref: '#/components/schemas/User'
|
||||
post:
|
||||
summary: Create new user
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/CreateUser'
|
||||
responses:
|
||||
'201':
|
||||
description: Created
|
||||
```
|
||||
|
||||
### Next Steps
|
||||
|
||||
1. ✅ API endpoints generated
|
||||
2. 🔧 Add authentication middleware
|
||||
3. 🔧 Implement business validation
|
||||
4. 🔧 Add pagination to list endpoint
|
||||
5. 📝 Review and customize as needed
|
||||
```
|
||||
|
||||
## Generation Modes
|
||||
|
||||
### CRUD Generation
|
||||
```bash
|
||||
/api-gen Product
|
||||
```
|
||||
Full Create, Read, Update, Delete operations
|
||||
|
||||
### Spec-Based Generation
|
||||
```bash
|
||||
/api-gen swagger.json
|
||||
```
|
||||
Generate from existing OpenAPI/Swagger spec
|
||||
|
||||
### Client Generation
|
||||
```bash
|
||||
/api-gen --client openapi.yaml
|
||||
```
|
||||
Generate TypeScript/Python client SDK
|
||||
|
||||
### Documentation Only
|
||||
```bash
|
||||
/api-gen --docs-only api/
|
||||
```
|
||||
Generate documentation for existing endpoints
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Description |
|
||||
|------|-------------|
|
||||
| `--framework=[express\|fastapi\|nestjs]` | Target framework |
|
||||
| `--db=[postgres\|mongodb\|prisma]` | Database/ORM |
|
||||
| `--auth` | Include authentication |
|
||||
| `--client` | Generate client SDK |
|
||||
| `--docs-only` | Documentation only |
|
||||
| `--test-framework=[jest\|vitest\|pytest]` | Testing framework |
|
||||
|
||||
## Advanced Examples
|
||||
|
||||
### Express + PostgreSQL + Auth
|
||||
|
||||
```bash
|
||||
/api-gen Order \
|
||||
--framework=express \
|
||||
--db=postgres \
|
||||
--auth
|
||||
```
|
||||
|
||||
### FastAPI + MongoDB
|
||||
|
||||
```bash
|
||||
/api-gen Product \
|
||||
--framework=fastapi \
|
||||
--db=mongodb
|
||||
```
|
||||
|
||||
### Generate Client SDK
|
||||
|
||||
```bash
|
||||
/api-gen --client openapi.yaml
|
||||
```
|
||||
|
||||
Creates TypeScript client:
|
||||
```typescript
|
||||
import { UserAPI } from './generated/client';
|
||||
|
||||
const api = new UserAPI({ baseUrl: 'http://localhost:3000' });
|
||||
const users = await api.getUsers();
|
||||
const user = await api.createUser({
|
||||
email: 'test@example.com',
|
||||
name: 'Test User'
|
||||
});
|
||||
```
|
||||
|
||||
## Resource Definition
|
||||
|
||||
When generating from resource name, you'll be asked:
|
||||
|
||||
```markdown
|
||||
### Define Resource: User
|
||||
|
||||
**Fields:**
|
||||
1. email (string, required, unique)
|
||||
2. name (string, required)
|
||||
3. role (enum: user|admin, optional, default: user)
|
||||
4. createdAt (datetime, auto)
|
||||
|
||||
**Relationships:**
|
||||
- Has many: Post
|
||||
- Belongs to: Organization (optional)
|
||||
|
||||
**Custom Endpoints:**
|
||||
- POST /users/:id/verify-email
|
||||
- POST /users/:id/reset-password
|
||||
|
||||
**Validation:**
|
||||
- Email must be valid format
|
||||
- Name: 1-100 characters
|
||||
- Password: min 8 characters
|
||||
|
||||
Proceed with generation? (y/n)
|
||||
```
|
||||
|
||||
## OpenAPI Templates
|
||||
|
||||
### Complete Endpoint
|
||||
|
||||
```yaml
|
||||
/api/orders:
|
||||
post:
|
||||
summary: Create new order
|
||||
tags:
|
||||
- Orders
|
||||
security:
|
||||
- bearerAuth: []
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/CreateOrder'
|
||||
examples:
|
||||
basic:
|
||||
value:
|
||||
items:
|
||||
- productId: "123"
|
||||
quantity: 2
|
||||
shippingAddress:
|
||||
street: "123 Main St"
|
||||
city: "New York"
|
||||
responses:
|
||||
'201':
|
||||
description: Order created
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/Order'
|
||||
'400':
|
||||
description: Invalid input
|
||||
'401':
|
||||
description: Unauthorized
|
||||
```
|
||||
|
||||
## Best Practices
|
||||
|
||||
1. **Start with Design**: Define API before generating
|
||||
2. **Review Generated Code**: Don't blindly accept all generated code
|
||||
3. **Customize**: Generated code is a starting point
|
||||
4. **Add Business Logic**: Implement domain-specific validation
|
||||
5. **Security**: Add authentication and authorization
|
||||
6. **Testing**: Extend generated tests with edge cases
|
||||
|
||||
## Use Cases
|
||||
|
||||
### Rapid Prototyping
|
||||
|
||||
```bash
|
||||
# Quickly scaffold multiple resources
|
||||
/api-gen User
|
||||
/api-gen Post
|
||||
/api-gen Comment
|
||||
```
|
||||
|
||||
### API-First Development
|
||||
|
||||
```bash
|
||||
# Design spec, then generate
|
||||
# 1. Create openapi.yaml
|
||||
# 2. Generate code
|
||||
/api-gen openapi.yaml
|
||||
```
|
||||
|
||||
### Client SDK Distribution
|
||||
|
||||
```bash
|
||||
# Generate client for API consumers
|
||||
/api-gen --client openapi.yaml
|
||||
```
|
||||
|
||||
### Documentation Generation
|
||||
|
||||
```bash
|
||||
# Document existing API
|
||||
/api-gen --docs-only src/api/
|
||||
```
|
||||
|
||||
## Related Commands
|
||||
|
||||
- [/doc](/claudekit/commands/doc) - Generate documentation
|
||||
- [/feature](/claudekit/core-commands/feature) - Full feature development
|
||||
- [/test](/claudekit/core-commands/test) - Generate tests
|
||||
- [/review](/claudekit/core-commands/review) - Review generated code
|
||||
Reference in New Issue
Block a user