From aura-frog
Designs consistent RESTful APIs covering conventions, HTTP methods, naming, versioning strategies, response formats, status codes, error handling, and pagination patterns.
npx claudepluginhub nguyenthienthanh/aura-frog --plugin aura-frogThis skill uses the workspace's default tool permissions.
**Category:** Dev Expert
Designs RESTful APIs with resource naming, HTTP methods, status codes, JSON response formats, pagination, and query parameters. Use when building new APIs or establishing conventions.
Provides REST API design patterns for resource naming, URL structure, HTTP methods, status codes, pagination, filtering, error responses, versioning, and rate limiting. Use when designing endpoints or reviewing contracts.
Provides REST API design patterns for resource naming, URL structures, HTTP methods/status codes, pagination, filtering, errors, versioning, and rate limiting.
Share bugs, ideas, or general feedback.
Category: Dev Expert Used By: architect, backend-python, backend-go, backend-laravel
Design consistent, RESTful APIs with proper versioning, documentation, and error handling.
| Method | Endpoint | Purpose | Response |
|---|---|---|---|
| GET | /users | List all | 200 + array |
| GET | /users/:id | Get one | 200 / 404 |
| POST | /users | Create | 201 + created |
| PUT | /users/:id | Replace | 200 / 404 |
| PATCH | /users/:id | Update | 200 / 404 |
| DELETE | /users/:id | Delete | 204 / 404 |
GET /users/:userId/orders # User's orders
POST /users/:userId/orders # Create order for user
GET /users/:userId/orders/:orderId # Specific order
| Type | Convention | Example |
|---|---|---|
| Resources | Plural nouns | /users, /orders |
| Actions | Verbs (rare) | /auth/login, /reports/generate |
| Query params | snake_case | ?page_size=20 |
| Request/Response | camelCase | { "firstName": "John" } |
| Strategy | Example | When to Use |
|---|---|---|
| URL Path | /v1/users | Most common, clear |
| Header | Accept: application/vnd.api+json;version=1 | Clean URLs |
| Query | /users?version=1 | Simple but messy |
Recommended: URL path (/api/v1/...)
{
"data": { "id": "123", "name": "John" },
"meta": { "timestamp": "2025-01-01T00:00:00Z" }
}
{
"data": [{ "id": "1" }, { "id": "2" }],
"meta": {
"page": 1,
"pageSize": 20,
"total": 100,
"totalPages": 5
}
}
{
"error": {
"code": "VALIDATION_ERROR",
"message": "Invalid input",
"fields": { "email": "Invalid format" }
}
}
| Code | Meaning | When to Use |
|---|---|---|
| 200 | OK | Successful GET/PUT/PATCH |
| 201 | Created | Successful POST |
| 204 | No Content | Successful DELETE |
| 400 | Bad Request | Invalid input |
| 401 | Unauthorized | No/invalid auth |
| 403 | Forbidden | No permission |
| 404 | Not Found | Resource missing |
| 409 | Conflict | Duplicate/state conflict |
| 422 | Unprocessable | Validation failed |
| 429 | Too Many | Rate limited |
| 500 | Server Error | Unexpected error |
GET /users?page=2&page_size=20
GET /users?cursor=eyJpZCI6MTAwfQ&limit=20
| Pattern | Pros | Cons |
|---|---|---|
| Offset | Simple, jump to page | Slow on large datasets |
| Cursor | Consistent, fast | No page jumping |
# Filter
GET /users?status=active&role=admin
# Sort
GET /users?sort=created_at:desc,name:asc
# Search
GET /users?q=john
# Combined
GET /users?status=active&sort=name:asc&page=1&page_size=20
openapi: 3.0.0
info:
title: User API
version: 1.0.0
paths:
/users:
get:
summary: List users
parameters:
- name: page
in: query
schema: { type: integer, default: 1 }
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/UserList'