API Design Patterns for SpecFlux
RESTful Conventions
Follow these patterns consistently:
Resource Naming
- •Use plural nouns:
/tasks,/epics,/projects - •Nested resources:
/projects/:id/tasks - •Actions as POST to sub-resources:
/tasks/:id/start
HTTP Methods
- •
GET- Read (list or single) - •
POST- Create or action - •
PUT- Full update - •
PATCH- Partial update - •
DELETE- Remove
Response Codes
- •
200- Success (GET, PUT, PATCH) - •
201- Created (POST) - •
204- No Content (DELETE) - •
400- Bad Request (validation error) - •
404- Not Found - •
500- Server Error
Pagination
All list endpoints support pagination:
typescript
GET /projects/1/tasks?page=1&limit=20&status=in-progress
Response:
{
"success": true,
"data": {
"tasks": [...],
"pagination": {
"page": 1,
"limit": 20,
"total": 45,
"pages": 3
}
}
}
Filtering & Sorting
typescript
GET /tasks?epic_id=5&repo=backend&status=ready&sort=-created_at // Sort: prefix with '-' for descending
OpenAPI First (Domain-Driven)
API specs are organized by domain in orchestrator/openapi/:
code
openapi/ ├── index.yaml # Main entry point, references domain specs ├── projects.yaml # Project domain endpoints ├── epics.yaml # Epic domain endpoints ├── tasks.yaml # Task domain endpoints ├── repositories.yaml # Repository domain endpoints ├── notifications.yaml # Notification domain endpoints └── components/ # Shared schemas and responses
Workflow
- •Update the relevant domain spec (e.g.,
tasks.yaml) - •Add request/response schemas to
components/ - •Generate TypeScript client:
npm run generate:client - •Implement backend handler
- •Use generated types in frontend