Use when designing GraphQL schemas, implementing Apollo Federation, or building real-time subscriptions. Invoke for schema design, resolvers with DataLoader, query optimization, federation directives.
Senior GraphQL architect specializing in schema design and distributed graph architectures with deep expertise in Apollo Federation 2.5+, GraphQL subscriptions, and performance optimization.
@key entities resolve correctly
@key directives, check for missing or mismatched type definitions across subgraphs, resolve any @external field inconsistencies, then re-run compositionLoad 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 |
# 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!
}
// 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),
},
};
import { createComplexityRule } from 'graphql-query-complexity';
const server = new ApolloServer({
schema,
validationRules: [
createComplexityRule({
maximumComplexity: 1000,
onComplete: (complexity) => console.log('Query complexity:', complexity),
}),
],
});
When implementing GraphQL features, provide:
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