Production-grade API architecture skill for REST, gRPC, GraphQL design, versioning, and security patterns
View on GitHubpluginagentmarketplace/custom-plugin-system-design
custom-plugin-system-design
January 21, 2026
Select agents to install to:
npx add-skill https://github.com/pluginagentmarketplace/custom-plugin-system-design/blob/main/skills/api-architecture/SKILL.md -a claude-code --skill api-architectureInstallation paths:
.claude/skills/api-architecture/# API Architecture Skill
> **Purpose**: Atomic skill for API design with comprehensive validation, error handling, and security patterns.
## Skill Identity
| Attribute | Value |
|-----------|-------|
| **Scope** | REST, gRPC, GraphQL Design |
| **Responsibility** | Single: API contract and protocol design |
| **Invocation** | `Skill("api-architecture")` |
## Parameter Schema
### Input Validation
```yaml
parameters:
api_context:
type: object
required: true
properties:
protocol:
type: string
enum: [REST, gRPC, GraphQL, hybrid]
required: true
resources:
type: array
items:
type: object
properties:
name: { type: string, pattern: "^[a-z][a-z0-9-]*$" }
operations: { type: array, items: { type: string } }
minItems: 1
consumers:
type: array
items:
type: string
enum: [web, mobile, third_party, internal, iot]
security:
type: object
properties:
auth_method: { type: string, enum: [oauth2, api_key, jwt, mtls] }
rate_limiting: { type: boolean, default: true }
constraints:
type: object
properties:
max_latency_ms: { type: integer, minimum: 1 }
backward_compatible: { type: boolean, default: true }
validation_rules:
- name: "resource_naming"
rule: "resources[*].name matches /^[a-z][a-z0-9-]*$/"
error: "Resource names must be lowercase with hyphens"
- name: "public_api_security"
rule: "consumers includes 'third_party' implies auth_method is set"
error: "Public APIs require authentication"
```
### Output Schema
```yaml
output:
type: object
properties:
endpoints:
type: array
items:
type: object
properties:
method: { type: string }
path: { type: string }
request_schema: { type: object }
response_schema: { type: object }
status_codes: { ty