Api endpoint
Skill zakelfassi/skills-driven-development/examples/webapp-starter/skills/api-endpoint
Agents that learn by doing — and remember how they did it. A methodology for AI agents to create, evolve, and share reusable skills.
npx -y skills add zakelfassi/skills-driven-development --skill api-endpointAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 17 stars17 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Scaffold a REST API endpoint with route, controller, validation, and tests. Use when creating new API endpoints, adding resources, or when asked to build a new backend route.
SKILL.md
2.3 KB, as published. Nobody here has run it
API Endpoint Scaffold
Create a new REST API endpoint following project conventions.
Inputs
- Entity name (singular, e.g.,
comment) - Fields (name:type pairs, e.g.,
body:string, author_id:number) - Auth required? (boolean, defaults to
true) - Nested under? (optional parent entity, e.g.,
post)
Steps
-
Create the route file
src/routes/{entity}.routes.ts- Define CRUD routes:
GET /,GET /:id,POST /,PUT /:id,DELETE /:id - If nested:
GET /{parent}s/:parentId/{entity}s
- Define CRUD routes:
-
Create the controller
src/controllers/{entity}.controller.ts- One method per route
- All responses use
{ data, error, meta }shape - Handle not-found with 404, validation with 422
-
Create the validation schema
src/validators/{entity}.validator.ts- Use Zod schemas matching the field definitions
- Separate schemas for create vs. update (update = partial)
-
Create the test file
tests/api/{entity}.test.ts- Test each CRUD operation
- Test validation (bad input returns 422)
- Test auth (if required: 401 without token)
- Use test factories for fixtures
-
Register the route
src/routes/index.ts- Add import +
app.use('/{entity}s', {entity}Routes) - If auth required: add auth middleware
- Add import +
Conventions
- Route paths are plural (
/comments, not/comment) - File names are singular (
comment.routes.ts) - All endpoints return
{ data, error, meta } metaincludes pagination for list endpoints- Auth middleware is applied at the route level, not controller level
Edge Cases
- File upload endpoints: Add
multermiddleware, acceptmultipart/form-data - Nested routes: Parent ID is validated in middleware (404 if parent doesn't exist)
- Soft delete:
DELETEsetsdeleted_attimestamp, doesn't remove the row