npx claudepluginhub pknull/asha-marketplace --plugin codeThis skill uses the workspace's default tool permissions.
Production-ready REST API conventions for consistency and developer experience.
Creates isolated Git worktrees for feature branches with prioritized directory selection, gitignore safety checks, auto project setup for Node/Python/Rust/Go, and baseline verification.
Executes implementation plans in current session by dispatching fresh subagents per independent task, with two-stage reviews: spec compliance then code quality.
Dispatches parallel agents to independently tackle 2+ tasks like separate test failures or subsystems without shared state or dependencies.
Production-ready REST API conventions for consistency and developer experience.
| Principle | Example |
|---|---|
| Plural nouns | /api/v1/users, /api/v1/orders |
| Kebab-case | /api/v1/team-members |
| No verbs | /api/v1/users not /api/v1/getUsers |
| Nested resources | /api/v1/users/:id/orders |
| Method | Purpose | Idempotent |
|---|---|---|
| GET | Retrieve resource(s) | Yes |
| POST | Create resource | No |
| PUT | Replace resource | Yes |
| PATCH | Partial update | Yes |
| DELETE | Remove resource | Yes |
| Code | When |
|---|---|
| 200 OK | GET, PUT, PATCH success |
| 201 Created | POST success (include Location header) |
| 204 No Content | DELETE success |
| Code | When |
|---|---|
| 400 Bad Request | Malformed syntax |
| 401 Unauthorized | Missing/invalid auth |
| 403 Forbidden | Valid auth, insufficient permissions |
| 404 Not Found | Resource doesn't exist |
| 409 Conflict | State conflict (duplicate, version mismatch) |
| 422 Unprocessable Entity | Semantic validation failure |
| 429 Too Many Requests | Rate limit exceeded |
| Code | When |
|---|---|
| 500 Internal Server Error | Unexpected server failure |
| 502 Bad Gateway | Upstream service failure |
| 503 Service Unavailable | Temporarily overloaded |
{
"data": { ... },
"meta": {
"page": 1,
"perPage": 20,
"total": 150
}
}
{
"error": {
"code": "VALIDATION_ERROR",
"message": "Invalid request data",
"details": [
{ "field": "email", "message": "Invalid email format" }
]
}
}
GET /api/v1/users?page=2&per_page=20
Good for: Small datasets, dashboards, random access.
GET /api/v1/users?cursor=eyJpZCI6MTAwfQ&limit=20
Good for: Large datasets, infinite scroll, real-time data.
GET /api/v1/products?price[gte]=10&price[lte]=100
GET /api/v1/products?category=electronics,books
GET /api/v1/products?sort=-created_at,name
GET /api/v1/orders?status=pending&user.role=admin
| Pattern | Meaning |
|---|---|
[gte], [lte] | Comparison operators |
| Comma-separated | Multiple values (OR) |
- prefix | Descending sort |
| Dot notation | Nested field access |
URL path versioning (recommended):
/api/v1/users
/api/v2/users
Rules:
Authorization: Bearer <token>
Headers:
X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 999
X-RateLimit-Reset: 1640000000
Tiers:
| Tier | Limit |
|---|---|
| Anonymous | 60/hour |
| Authenticated | 1000/hour |
| Premium | 10000/hour |
{
"data": { "id": 1, "name": "..." },
"links": {
"self": "/api/v1/users/1",
"orders": "/api/v1/users/1/orders"
}
}
| Avoid | Instead |
|---|---|
/api/v1/getUsers | /api/v1/users (GET) |
/api/v1/user (singular) | /api/v1/users (plural) |
| Verbs in URLs | HTTP methods convey action |
| Leaking internal IDs | Use UUIDs or slugs |
| 200 for errors | Proper status codes |