算法艺术创作
algorithmic-art
通过代码和可调参数创作生成艺术与交互式视觉效果。
design-api【设计与创意】Design REST and GraphQL APIs: naming, versioning, error shapes, auth. Use when "design an API", "create endpoints", "structure my API responses", "plan API architecture", "REST vs GraphQL", or "API contract".
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
Degree of freedom: MIXED. Resource model, error shape, and REST vs
GraphQL [HIGH freedom]; pre-design docs/schema/grep
[LOW freedom — run exactly].
Design clean, consistent, and developer-friendly APIs.
Survey:
ordershasuser_id; noGET /users/:id/orders; clients useuseQuery. Model: order is a nested user resource, not a/getUserOrdersRPC. Contract:GET /users/:id/orders→{ data, meta }; shared{ error: { code, message, details } }. Check: plural kebab-case; list paginated; 401/404/422 only from the status table.
{ error: { code, message, details } }GET /resourcesdebug-fe-be-integration; product scope still fuzzy → design-prdBefore designing any API:
/api-docs, /docs, /swagger, /openapi.json)naming under docs/ and src/api/)Use Supabase MCP to understand existing data structure:
SELECT column_name, data_type, is_nullable
FROM information_schema.columns WHERE table_name = 'your_table';
Also check enum values (enum_range) and foreign keys (information_schema.table_constraints):
references/examples.md §Pre-design schema probes.
Use Grep to search for similar endpoints already implemented:
Grep: "router.get|router.post" to find existing route patterns
Grep: "useQuery|useMutation" to find existing frontend integrations
Before designing, state:
"Pre-design check:
- Existing API docs reviewed: [YES/NO]
- Database schema verified: [tables/enums checked]
- Similar endpoints found: [list or none]
- Naming conventions confirmed: [YES/NO]"
GET /resources # List
GET /resources/:id # Get one
POST /resources # Create
PUT /resources/:id # Replace
PATCH /resources/:id # Update
DELETE /resources/:id # Delete
| Do | Don't |
|---|---|
/users | /getUsers, /user-list |
/users/:id | /user/:id, /users/get/:id |
/users/:id/orders | /getUserOrders |
| Plural nouns | Verbs, singular |
| kebab-case | camelCase, snake_case |
GET /users # List users
GET /users/123 # Get user 123
GET /users/123/orders # User's orders
GET /users/123/orders/456 # Specific order
POST /users/123/orders # Create order for user
{ "data": { ... } } for one resource; { "data": [...], "meta": { total, page, perPage, totalPages } } for lists.{ "error": { "code", "message", "details" } }; code is machine-readable, details is a per-field list.{
"error": {
"code": "VALIDATION_ERROR",
"message": "Invalid input data",
"details": [
{ "field": "email", "message": "Invalid email format" }
]
}
}
Request, single, and list bodies in full: references/examples.md §Request body through §List response.
| Code | When to Use |
|---|---|
200 OK | GET, PUT, PATCH success |
201 Created | POST created new resource |
204 No Content | DELETE success, no body |
| Code | When to Use |
|---|---|
400 Bad Request | Invalid request body |
401 Unauthorized | Not authenticated |
403 Forbidden | Authenticated but not allowed |
404 Not Found | Resource doesn't exist |
409 Conflict | Resource conflict (duplicate) |
422 Unprocessable | Validation failed |
429 Too Many | Rate limited |
| Code | When to Use |
|---|---|
500 Internal Error | Unexpected server error |
502 Bad Gateway | Upstream service failed |
503 Unavailable | Service temporarily down |
?role=admin&status=active, date bounds as ?createdAfter=2024-01-01.?sort=name; - prefix for descending; comma-separated for multiple (?sort=role,-name).?page=2&perPage=20 by default; ?cursor=abc123 for large or live lists; never an unbounded list.?fields=id,name,email; relations via ?include=orders,profile.Example URLs for each: references/examples.md §Query parameters.
Default: URL path (GET /v1/users, GET /v2/users). Header versioning
(Accept: application/vnd.api+json;version=2) is the alternative:
references/examples.md §Versioning.
Default: Authorization: Bearer <token>. API key via X-API-Key header (or ?apiKey=) is the
alternative for server-to-server callers: references/examples.md §Authentication.
POST /users/bulk with { create: [...], update: [...], delete: [ids] }.POST /users/search with { query, filters, sort } when the criteria outgrow query strings.POST /orders/123/cancel, POST /users/123/verify-email, POST /payments/123/refund.Bodies for bulk and search: references/examples.md §Bulk operations, §Search.
Per endpoint: title, one-line purpose, **Endpoint:**, **Authentication:**, request-body
table (field, type, required, description), response status with a JSON example, and the error
list. Full template: references/examples.md §Documentation template.