skills/api-architect/SKILL.md
Expert API designer for REST, GraphQL, gRPC architectures. Activate on: API design, REST API, GraphQL schema, gRPC service, OpenAPI, Swagger, API versioning, endpoint design, rate limiting, OAuth flow. NOT for: database schema (use data-pipeline-engineer), frontend consumption (use web-design-expert), deployment (use devops-automator).
npx skillsauth add curiositech/windags-skills api-architectInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Expert API designer specializing in REST, GraphQL, gRPC, and WebSocket architectures.
Activate on: "API design", "REST API", "GraphQL schema", "gRPC service", "OpenAPI", "Swagger", "API versioning", "endpoint design", "rate limiting", "OAuth flow", "API gateway"
NOT for: Database schema → data-pipeline-engineer | Frontend consumption → web-design-expert | Deployment → devops-automator
| Domain | Technologies | |--------|-------------| | REST | OpenAPI 3.1, HATEOAS, Pagination | | GraphQL | SDL, Relay, DataLoader, Federation | | gRPC | Protocol Buffers, Streaming patterns | | Security | OAuth 2.0, JWT, API Keys, RBAC | | DX | Swagger UI, SDK generation, Sandboxes |
Design Contract → Generate Stubs → Implement → Test Against Spec
success: { data: <resource>, meta: { page, total } }
error: { error: { code, message, details: [{ field, issue }] } }
/v1/users (most explicit)Accept: application/vnd.api+json;version=1/users?version=1Full working examples in ./references/:
| File | Description | Lines |
|------|-------------|-------|
| openapi-spec.yaml | Complete OpenAPI 3.1 spec | 162 |
| graphql-schema.graphql | GraphQL with Relay connections | 111 |
| grpc-service.proto | Protocol Buffer, all streaming | 95 |
| rate-limiting.yaml | Tier-based rate limit config | 85 |
| api-security.yaml | Auth, CORS, security headers | 130 |
Symptom: /getUsers, /createOrder, /deleteProduct
Fix: Use nouns (/users, /orders), let HTTP methods convey action
Symptom: {data: [...]} sometimes, raw arrays other times
Fix: Always use consistent envelope structure
Symptom: Removing fields, changing types without warning Fix: Semantic versioning, deprecation headers, sunset periods
Symptom: Resolver queries database per item in list
Fix: DataLoader pattern for batching, @defer for large payloads
Symptom: /users returns 50 fields when clients need 3
Fix: Sparse fieldsets (?fields=id,name,email) or GraphQL
Symptom: List endpoints return all records
Fix: Default limits, cursor-based pagination, hasMore indicator
Symptom: Duplicate POST requests create duplicate resources
Fix: Accept Idempotency-Key header, return cached response
Symptom: Stack traces, SQL errors exposed in 500 responses Fix: Generic error messages in production, request IDs for debugging
Symptom: Browser clients blocked with CORS errors Fix: Configure allowed origins, methods, headers explicitly
Symptom: API vulnerable to abuse, no usage visibility
Fix: Implement limits per tier, return X-RateLimit-* headers
Run ./scripts/validate-api-spec.sh to check:
[ ] All endpoints use nouns, not verbs
[ ] Consistent response envelope structure
[ ] Error responses include codes and actionable messages
[ ] Pagination on all list endpoints
[ ] Authentication/authorization documented
[ ] Rate limit headers defined
[ ] Versioning strategy documented
[ ] CORS configured for known origins
[ ] Idempotency keys for mutating operations
[ ] OpenAPI spec validates without errors
[ ] SDK generation tested
[ ] Examples for all request/response types
Read, Write, Edit - File operations for specsBash(npm:*, npx:*) - OpenAPI linting, code generationBash(openapi-generator:*) - SDK generationdata-ai
license: Apache-2.0 NOT for unrelated tasks outside this domain.
development
Use when designing caching strategies (cache-aside, write-through, write-behind), implementing distributed locks, building rate limiters, leaderboards, real-time streams (XADD/consumer groups), pub/sub, or tuning eviction policies. Triggers: thundering-herd on cache miss, dogpile on key expiry, Redlock vs SET-NX-PX choice, sliding-window rate limiter, hot-key on a single cluster slot, big-key blowup, MULTI/EXEC across slots, KEYS in production. NOT for Redis Cluster operations/admin (different domain), embedded KV (SQLite, leveldb), in-process LRU caches, or Memcached.
tools
Drawing the `'use client'` boundary correctly in React Server Components apps (Next.js App Router, RSC frameworks) — leaf-pushing, slot composition, serialization rules, and environment poisoning prevention. Grounded in react.dev and Next.js 16 docs.
development
Use when designing rate limiting for an API, choosing between token bucket / sliding window / leaky bucket / fixed window, implementing it in Redis, deciding edge (Cloudflare/Upstash) vs origin enforcement, sizing per-user vs per-IP vs per-endpoint quotas, returning the right 429 response with Retry-After, or fixing the boundary-burst bug in fixed-window limiters. Triggers: 429 too many requests, INCR + EXPIRE, ZADD + ZREMRANGEBYSCORE + ZCARD, X-RateLimit-Remaining header, Cloudflare WAF rate limiting rules, Upstash @upstash/ratelimit, leaky bucket shaping vs policing, distributed rate limiter consistency. NOT for DDoS mitigation specifically (different scale), CAPTCHA / bot management, full WAF design, or per-user quota billing.