graphql-expert
/graphql-expert
Wspiera tworzenie API GraphQL na poziomie eksperckim: projekt schematu, resolvery, subskrypcje, Apollo Server 4 i DataLoader przeciw problemowi N+1.
- Repozytorium
- pcl ↗
- Licencja
- Apache-2.0
- Ostatnia zmiana repozytorium
- 10.09.2026
Ocena i bezpieczeństwo
- Pliki w paczce
- 4
- Skrypty
- 0
- Komentarze HTML
- 0
- Adresy URL w SKILL.md
- 9
Brak sygnałów. Repozytorium zmienione 10.09.2026, bez odwołań do wycofanych modeli i API.
Apache-2.0, otwarta: można używać i zmieniać, z zachowaniem licencji i informacji o zmianach.
Co robi i kiedy
Wspiera tworzenie API GraphQL na poziomie eksperckim: projekt schematu, resolvery, subskrypcje, Apollo Server 4 i DataLoader przeciw problemowi N+1.
Oryginalny opis (EN)
Expert-level GraphQL API development with schema design, resolvers, and subscriptions. Use when the user mentions API, apollo, schema, resolvers, subscriptions, or relay, or when the task involves Schema Design, Queries and Mutations, Apollo Server 4, or DataLoader for N+1 Prevention.
Jak działa
- Core Concepts
- GraphQL Federation
- Anti-Patterns to Avoid
- Testing
- Reference Documentation
- Resources
Podgląd SKILL.md
---
name: graphql-expert
version: 1.1.0
description: >-
Expert-level GraphQL API development with schema design, resolvers, and subscriptions.
Use when the user mentions API, apollo, schema, resolvers, subscriptions, or relay, or
when the task involves Schema Design, Queries and Mutations, Apollo Server 4, or
DataLoader for N+1 Prevention.
category: api
tags: [graphql, api, apollo, schema, resolvers, subscriptions, relay]
allowed-tools:
- Read
- Write
- Edit
- Bash(node:*, npm:*, npx:*)
---
# GraphQL Expert
Expert guidance for GraphQL API development, schema design, resolvers, subscriptions, and best practices for building type-safe, efficient APIs.
## Core Concepts
### Schema Design
- Type system and schema definition language (SDL)
- Object types, interfaces, unions, and enums
- Input types and custom scalars
- Schema stitching and federation
- Modular schema organization
### Resolvers
- Resolver functions and data sources
- Context and info arguments
- Field-level resolvers
- Resolver chains and data loaders
- Error handling in resolvers
### Queries and Mutations
- Query design and naming conventions
- Mutation patterns and best practices
- Input validation and sanitization
- Pagination strategies (cursor-based, offset)
- Filtering and sorting
### Subscriptions
- Real-time updates with WebSocket
- Subscription resolvers
- PubSub patterns
- Subscription filtering
- Connection management
### Performance
- N+1 query problem and DataLoader
- Query complexity analysis
- Depth limiting and query cost
- Caching strategies (field-level, full response)
- Batching and deduplication
## GraphQL Federation
### Federated Schema
```typescript
// Users service
import { buildSubgraphSchema } from '@apollo/subgraph';
const typeDefs = gql`
extend schema @link(url: "https://specs.apollo.dev/federation/v2.3")
type User @key(fields: "id") {
id: ID!
email: String!
name: String!
}
type Query {
user(id: ID!): User
users: [User!]!
}
`;
const resolvers = {
User: {
__resolveReference: async (reference, { dataSources }) => {
return dataSources.userAPI.getUserById(reference.id);
},
},
Query: {
user: (_, { id }, { dataSources }) => dataSources.userAPI.getUserById(id),
users: (_, __, { dataSources }) => dataSources.userAPI.getUsers(),
},
};
// Posts service
const typeDefs = gql`
extend schema @link(url: "https://specs.apollo.dev/federation/v2.3")
type Post @key(fields: "id") {
id: ID!
title: String!
content: String!
author: User!
}
extend type User @key(fields: "id") {
id: ID! @external
posts: [Post!]!
}
type Query {
post(id: ID!): Post
posts: [Post!]!
}
`;
const resolvers = {
Post: {
author: (post) => ({ __typename: 'User', id: post.authorId }),
},
User: {
posts: (user, _, { dataSources }) =>
dataSources.postAPI.getPostsByAuthorId(user.id),
},
};
// Gateway
import { ApolloGateway, IntrospectAndCompose } from '@apollo/gateway';
const gateway = new ApolloGateway({
supergraphSdl: new IntrospectAndCompose({
subgraphs: [
{ name: 'users', url: 'http://localhost:4001/graphql' },
{ name: 'posts', url: 'http://localhost:4002/graphql' },
],
}),
});
const server = new ApolloServer({ gateway });
```
## Anti-Patterns to Avoid
❌ **Exposing internal IDs**: Use opaque IDs or UUIDs
❌ **Overly nested queries**: Limit query depth
❌ **No pagination**: Always paginate lists
❌ **Resolving in mutations**: Keep mutations focused
❌ **Exposing database schema directly**: Design API-first
❌ **No DataLoader**: Leads to N+1 queries
❌ **Generic error messages**: Provide actionable errors
❌ **No versioning strategy**: Plan for schema evolution
## Testing
```typescript
import { ApolloServer } from '@apollo/server';
import { describe, it, expect } from 'vitest';
describe('GraphQL Server', () => {
it('should fetch user by id', async () => {
const server = new ApolloServer({ typeDefs, resolvers });
const response = await server.executeOperation({
query: `
query GetUser($id: ID!) {
user(id: $id) {
id
name
email
}
}
`,
variables: { id: '1' },
});
expect(response.body.kind).toBe('single');
expect(response.body.singleResult.data?.user).toEqual({
id: '1',
name: 'Alice',
email: 'alice@example.com',
});
});
it('should create post', async () => {
const response = await server.executeOperation({
query: `
mutation CreatePost($input: CreatePostInput!) {
createPost(input: $input) {
id
title
}
}
`,
variables: {
input: {
title: 'Test Post',
content: 'Content',
},
},
});
expect(response.body.singleResult.data?.createPost).toHaveProperty('id');
});
});
```
## Reference Documentation
Detailed material lives alongside this skill and is read on demand:
- [Common Patterns](references/PATTERNS.md) — Relay Cursor Pagination, File Upload
- [Best Practices](references/BEST_PRACTICES.md) — Schema Design, Performance Optimization, Security
- [Modern GraphQL Development](references/MODERN_GRAPHQL_DEVELOPMENT.md) — Apollo Server 4, DataLoader for N+1 Prevention, GraphQL Codegen, Error Handling, Authentication & Authorization, Subscriptions with WebSocket, GraphQL Client (Apollo Client), Query Complexity & Depth Limiting
## Resources
- Apollo Server: https://www.apollographql.com/docs/apollo-server/
- GraphQL Spec: https://spec.graphql.org/
- DataLoader: https://github.com/graphql/dataloader
- GraphQL Code Generator: https://the-guild.dev/graphql/codegen
- GraphQL Tools: https://the-guild.dev/graphql/tools
Pliki w paczce (4)
- SKILL.md 6 KB
- references/BEST_PRACTICES.md 1 KB
- references/MODERN_GRAPHQL_DEVELOPMENT.md 13 KB
- references/PATTERNS.md 1 KB
Wersje
| Repozytorium | Wynik | Licencja |
|---|---|---|
| Ta strona · personamanagmentlayer/pcl | 100 | Apache-2.0 |
| seaworld008/commonly-used-high-value-skills | 100 | MIT |
| travisjneuman/.claude | 95 | MIT |
Migawka bazy z 28.10.2026 · wersja paczki 29cfe8002adf (skrót SHA-256 całej paczki)
Pobrania w ostatnich 30 dniach: 0 · ranking
Zgłoś problem z tym skillem: szkodliwa treść, błędny opis albo prośba autora o usunięcie.
Podobne skille
- 100graphql
Pomaga projektować API GraphQL: schemat, zapytania, mutacje i resolvery, a także uwierzytelnianie, paginację, DataLoader i Apollo Server. - 100graphql
Pomaga budować i konsumować API GraphQL: serwer, schematy, resolvery, subskrypcje, uwierzytelnianie, DataLoader, paginacja, przesyłanie plików i migracja z REST przy użyciu Apollo. - 91apollo-server-patterns
Pomaga budować API GraphQL w Apollo Server: resolvery, źródła danych, projekt schematu i federację. - 100graphql
Wspiera tworzenie API GraphQL: projekt schematu, architekturę resolverów, wykrywanie N+1 z DataLoader, subskrypcje, federację i poprawę wydajności. - 100graphql-architect
Wspiera projektowanie schematów GraphQL, wdrażanie Apollo Federation i subskrypcji czasu rzeczywistego, resolvery z DataLoader, optymalizację zapytań oraz dyrektywy federacji. - 95graphql
Projektuje API GraphQL: federację Apollo, łączenie schematów, resolvery i rozwiązywanie problemu N+1.