swvalidated-api
Generate a validated REST API endpoint with automatic test execution
Installation
Follow the repository instructions for this skill and your agent. Review the files and dependencies before adding it to your workflow.
View source ↗GuidesSkill instructions
Self-Validating API Endpoint Generator
You are generating a REST API endpoint with automatic validation.
How Self-Validation Works
┌──────────────────────────────────────────────────────────────┐
│ YOUR CODE WILL BE AUTOMATICALLY VALIDATED │
├──────────────────────────────────────────────────────────────┤
│ │
│ 1. PRE-CHECK: Verify project has Express installed │
│ │
│ 2. GENERATE: You create the endpoint + tests │
│ │
│ 3. VALIDATE (automatic): │
│ ├─ npm test → Must pass │
│ ├─ npm run lint → Auto-fixed if needed │
│ └─ tsc --noEmit → Must type-check │
│ │
│ 4. If validation fails: │
│ └─ You get feedback and retry (max 3 times) │
│ │
│ 5. If still failing after 3 attempts: │
│ └─ Pause for human review │
│ │
└──────────────────────────────────────────────────────────────┘
Required Outputs
1. API Endpoint (src/routes/[name].ts)
import { Router, Request, Response } from 'express';
const router = Router();
// GET /api/[name]
router.get('/', async (req: Request, res: Response) => {
// Implementation
});
// POST /api/[name]
router.post('/', async (req: Request, res: Response) => {
// Implementation with validation
});
export default router;
2. Test File (src/routes/[name].test.ts) - REQUIRED!
import { describe, it, expect, beforeAll, afterAll } from 'vitest';
import request from 'supertest';
import app from '../app';
describe('[Name] API', () => {
describe('GET /api/[name]', () => {
it('should return 200 with data', async () => {
const res = await request(app).get('/api/[name]');
expect(res.status).toBe(200);
expect(res.body).toBeDefined();
});
});
describe('POST /api/[name]', () => {
it('should create resource with valid data', async () => {
const res = await request(app)
.post('/api/[name]')
.send({ /* valid data */ });
expect(res.status).toBe(201);
});
it('should return 400 for invalid data', async () => {
const res = await request(app)
.post('/api/[name]')
.send({ /* invalid data */ });
expect(res.status).toBe(400);
});
});
});
Validation Criteria
| Check | Command | Required |
|---|---|---|
| Tests pass | npm test -- --testPathPattern="$OUTPUT" |
✅ Yes |
| Lint clean | npm run lint -- $OUTPUT |
✅ Yes (auto-fix) |
| Types valid | npx tsc --noEmit $OUTPUT |
✅ Yes |
Self-Healing Behavior
If tests fail, you will receive:
- The test output showing which tests failed
- A request to fix the failing tests
- Another attempt (up to 3 total)
Example failure feedback:
🔴 VALIDATION FAILED (attempt 1/3)
Test Results:
✗ GET /api/users should return 200 with data
Expected: 200
Received: 404
Please fix the route handler and regenerate.
Important Notes
- Always generate tests - The skill will NOT complete without passing tests
- Use proper types - TypeScript errors block completion
- Follow lint rules - Auto-fixed but avoid common issues
- Handle edge cases - Test both success and error paths
Examples
Read the usage examples in the source repository.
View source ↗Source history
- Indexed on
- 2026-01-20
- Index updated
- 2026-01-28
- Branch
- main
Index and sync dates describe this directory. View the source repository for code history.
GitHub ↗chat Comments (0)
Sign in to join the discussion and leave a comment.
No comments yet. Be the first to share your thoughts!