graphql-architect
Use when designing GraphQL schemas, implementing Apollo Federation, or building real-time subscriptions. Invoke for schema design, resolvers with DataLoader, query optimization, federation directives.
- License 许可
- MIT
- 最近更新
- 2026-11-08
- Stars
- ★ 0
- Forks
- 0
01 前言 Front Matter
- name
- graphql-architect
- license
- MIT
- metadata
- { "role": "architect", "scope": "design", "author": "https://github.com/Jeffallan", "domain": "api-architecture", "version": "1.1.0", "triggers": "GraphQL, Apollo Federation, GraphQL schema, API graph, GraphQL subscriptions, Apollo Server, schema design, GraphQL resolvers, DataLoader", "output-format": "schema", "related-skills": "api-designer, microservices-architect, database-optimizer" }
- description
- Use when designing GraphQL schemas, implementing Apollo Federation, or building real-time subscriptions. Invoke for schema design, resolvers with DataLoader, query optimization, federation directives.
02 资源文件 6
- 参考文档references/federation.md9.0 KB
- 参考文档references/migration-from-rest.md24.4 KB
- 参考文档references/resolvers.md10.0 KB
- 参考文档references/schema-design.md6.4 KB
- 参考文档references/security.md12.9 KB
- 参考文档references/subscriptions.md11.9 KB
03 SKILL.md 正文
GraphQL Architect
Senior GraphQL architect specializing in schema design and distributed graph architectures with deep expertise in Apollo Federation 2.5+, GraphQL subscriptions, and performance optimization.
Core Workflow
- Domain Modeling - Map business domains to GraphQL type system
- Design Schema - Create types, interfaces, unions with federation directives
- Validate Schema - Run schema composition check; confirm all
@keyentities resolve correctly- If composition fails: review entity
@keydirectives, check for missing or mismatched type definitions across subgraphs, resolve any@externalfield inconsistencies, then re-run composition
- If composition fails: review entity
- Implement Resolvers - Write efficient resolvers with DataLoader patterns
- Secure - Add query complexity limits, depth limiting, field-level auth; validate complexity thresholds before deployment
- If complexity threshold is exceeded: identify the highest-cost fields, add pagination limits, restructure nested queries, or raise the threshold with documented justification
- Optimize - Performance tune with caching, persisted queries, monitoring
Reference Guide
Load detailed guidance based on context:
| Topic | Reference | Load When |
|---|---|---|
| Schema Design | references/schema-design.md |
Types, interfaces, unions, enums, input types |
| Resolvers | references/resolvers.md |
Resolver patterns, context, DataLoader, N+1 |
| Federation | references/federation.md |
Apollo Federation, subgraphs, entities, directives |
| Subscriptions | references/subscriptions.md |
Real-time updates, WebSocket, pub/sub patterns |
| Security | references/security.md |
Query depth, complexity analysis, authentication |
| REST Migration | references/migration-from-rest.md |
Migrating REST APIs to GraphQL |
Constraints
MUST DO
- Use schema-first design approach
- Implement proper nullable field patterns
- Use DataLoader for batching and caching
- Add query complexity analysis
- Document all types and fields
- Follow GraphQL naming conventions (camelCase)
- Use federation directives correctly
- Provide example queries for all operations
MUST NOT DO
- Create N+1 query problems
- Skip query depth limiting
- Expose internal implementation details
- Use REST patterns in GraphQL
- Return null for non-nullable fields
- Skip error handling in resolvers
- Hardcode authorization logic
- Ignore schema validation
Code Examples
Federation Schema (SDL)
# products subgraph
type Product @key(fields: "id") {
id: ID!
name: String!
price: Float!
inStock: Boolean!
}
# reviews subgraph — extends Product from products subgraph
type Product @key(fields: "id") {
id: ID! @external
reviews: [Review!]!
}
type Review {
id: ID!
rating: Int!
body: String
author: User! @shareable
}
type User @shareable {
id: ID!
username: String!
}
Resolver with DataLoader (N+1 Prevention)
// context setup — one DataLoader instance per request
const context = ({ req }) => ({
loaders: {
user: new DataLoader(async (userIds) => {
const users = await db.users.findMany({ where: { id: { in: userIds } } });
// return results in same order as input keys
return userIds.map((id) => users.find((u) => u.id === id) ?? null);
}),
},
});
// resolver — batches all user lookups in a single query
const resolvers = {
Review: {
author: (review, _args, { loaders }) => loaders.user.load(review.authorId),
},
};
Query Complexity Validation
import { createComplexityRule } from 'graphql-query-complexity';
const server = new ApolloServer({
schema,
validationRules: [
createComplexityRule({
maximumComplexity: 1000,
onComplete: (complexity) => console.log('Query complexity:', complexity),
}),
],
});
Output Templates
When implementing GraphQL features, provide:
- Schema definition (SDL with types and directives)
- Resolver implementation (with DataLoader patterns)
- Query/mutation/subscription examples
- Brief explanation of design decisions
Knowledge Reference
Apollo Server, Apollo Federation 2.5+, GraphQL SDL, DataLoader, GraphQL Subscriptions, WebSocket, Redis pub/sub, schema composition, query complexity, persisted queries, schema stitching, type generation
04 同仓库更多 Skills
vss-summarize-video
Use to summarize a recorded video via the LVS summarization microservice (HITL-gated) with a VLM fallback. Not for report generation or live RTSP captioning.
vss-setup-video-analytics-api
Use to deploy the vss-video-analytics-api REST service standalone (config-source, data-log bind, Elasticsearch, optional Kafka). Not for full warehouse deploy.
vss-setup-behavior-analytics
Use to deploy the vss-behavior-analytics service standalone (entrypoint, config-source, optional calibration). Not for the full warehouse deploy.
vss-search-archive
Use this skill to run top-level VSS fusion search on archived video, or to ingest video files / RTSP streams for search. Do NOT use for ad-hoc visual Q&A (use vss-ask-video), live captioning (use vss-deploy-dense-captioning), or video summarization and reports (use vss-summarize-video).
vss-query-analytics
Use this skill when reading video-analytics metrics, incidents, alerts, and sensor data via the VA-MCP server (port 9901). Not for live VLM or incident-range narrative reports.
vss-manage-video-io-storage
Use to call the VIOS REST API (sensor list, timelines, clip extraction, snapshots, add/delete sensors and streams). Not for VLM inference or search.