graphql-implementation — скилл для Claude Code: GraphQL API
Скилл для сборки GraphQL API: схема, резолверы, обработка ошибок и защита от N+1. Пригодится при переходе с REST и при подписках в реальном времени.
npx skills add secondsky/claude-skills --skill graphql-implementation -a claude-codeЧто делает graphql-implementation
Скилл задаёт структуру работы над GraphQL API. Внутри — примеры схемы на GraphQL SDL: типы User и Post, запросы с limit и offset, мутации с input-типами вроде CreateUserInput. Резолверы показаны на Apollo Server: Query, User, Mutation, данные тянутся через dataSources.
Отдельный блок — DataLoader. Он батчит запросы по списку id и закрывает проблему N+1, которая всплывает, когда каждый пост тянет своего автора отдельным запросом. Ошибки оформляются через GraphQLError с кодом в extensions, например NOT_FOUND. Для Python есть отдельная справка по Graphene с интеграцией Flask: ObjectType, классы Query и Mutation, input-типы.
В правилах прямо сказано, чего делать нельзя: разрешать глубоко вложенные запросы без лимитов, светить внутренности базы, игнорировать N+1, отдавать данные без проверки прав. Если у вас уже есть публичный GraphQL-эндпоинт без ограничения сложности запросов, это повод проверить его до релиза.
Какие задачи решает
- спроектировать схему GraphQL под нужды клиента
- написать резолверы для запросов и мутаций
- убрать N+1 через батчинг DataLoader
- оформить ошибки с кодами в extensions
- добавить подписки для данных в реальном времени
Примеры запросов агенту
- Спроектируй GraphQL-схему для блога с пользователями и постами
- Добавь DataLoader, чтобы резолвер постов не делал запрос на каждого автора
- Переведи этот REST-эндпоинт на GraphQL-мутации с input-типами
Как установить graphql-implementation
1Через Skills CLI (Vercel)
npx skills add secondsky/claude-skills --skill graphql-implementation -a claude-code2Вручную: положить файлы
~/.claude/skills/graphql-implementation/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/graphql-implementation/
1Через Skills CLI (Vercel)
npx skills add secondsky/claude-skills --skill graphql-implementation -a codex2Вручную: положить файлы
.agents/skills/graphql-implementation/SKILL.mdДля всех проектов — ~/.agents/skills/
1Через Skills CLI (Vercel)
npx skills add secondsky/claude-skills --skill graphql-implementation -a cursor2Вручную: положить файлы
.cursor/skills/graphql-implementation/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install secondsky/claude-skills graphql-implementation2Вручную: положить файлы
.github/skills/graphql-implementation/SKILL.md1Через Skills CLI (Vercel)
npx skills add secondsky/claude-skills --skill graphql-implementation -a gemini-cli2Командой платформы
gemini skills install https://github.com/secondsky/claude-skills --path plugins/graphql-implementation/skills/graphql-implementationВручную: положить файлы
.devin/skills/graphql-implementation/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Через Skills CLI (Vercel)
npx skills add secondsky/claude-skills --skill graphql-implementation -a opencodeClaude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов
Из того же набора89
Похожие
Рядом в теме «Бэкенд и API»
Всё по теме «Бэкенд и API» →Вопросы о graphql-implementation
Как установить graphql-implementation в Claude?
Выполните npx skills add secondsky/claude-skills --skill graphql-implementation -a claude-code. Скилл появится в ~/.claude/skills/graphql-implementation/SKILL.md.
Что делает graphql-implementation?
Помогает собрать GraphQL API: проектирование схемы, резолверы, обработка ошибок и оптимизация запросов. Внутри есть примеры для Apollo Server и справка по Python Graphene с Flask.
Как скилл решает проблему N+1?
Через DataLoader: он собирает id из резолверов и делает один запрос вместо запроса на каждую запись. В правилах скилла игнорировать N+1 прямо запрещено.
Исходный текст
SKILL.md · MIT
---
name: graphql-implementation
description: Builds GraphQL APIs with schema design, resolvers, error handling, and performance optimization using Apollo or Graphene. Use when creating flexible query APIs, migrating from REST, or implementing real-time subscriptions.
license: MIT
---
# GraphQL Implementation
Build GraphQL APIs with proper schema design, resolvers, and performance optimization.
## Schema Definition
```graphql
type User {
id: ID!
name: String!
email: String!
posts(limit: Int = 10): [Post!]!
}
type Post {
id: ID!
title: String!
content: String!
author: User!
createdAt: DateTime!
}
type Query {
user(id: ID!): User
users(limit: Int, offset: Int): [User!]!
post(id: ID!): Post
}
type Mutation {
createUser(input: CreateUserInput!): User!
createPost(input: CreatePostInput!): Post!
}
input CreateUserInput {
name: String!
email: String!
}
```
## Apollo Server Setup
```javascript
const { ApolloServer } = require('@apollo/server');
const { startStandaloneServer } = require('@apollo/server/standalone');
const resolvers = {
Query: {
user: (_, { id }, { dataSources }) =>
dataSources.userAPI.getUser(id),
users: (_, { limit, offset }, { dataSources }) =>
dataSources.userAPI.getUsers({ limit, offset })
},
User: {
posts: (user, { limit }, { dataSources }) =>
dataSources.postAPI.getPostsByUser(user.id, limit)
},
Mutation: {
createUser: (_, { input }, { dataSources }) =>
dataSources.userAPI.createUser(input)
}
};
const server = new ApolloServer({ typeDefs, resolvers });
```
## DataLoader for N+1 Prevention
```javascript
const DataLoader = require('dataloader');
const userLoader = new DataLoader(async (ids) => {
const users = await User.find({ _id: { $in: ids } });
return ids.map(id => users.find(u => u.id === id));
});
```
## Error Handling
```javascript
const { GraphQLError } = require('graphql');
throw new GraphQLError('User not found', {
extensions: { code: 'NOT_FOUND', argumentName: 'id' }
});
```
## Best Practices
- Use DataLoader to batch queries
- Implement query complexity limits
- Design schema around client needs
- Validate all inputs
- Use descriptive naming conventions
## Python Graphene
See [references/python-graphene.md](references/python-graphene.md) for complete Flask implementation with:
- ObjectType definitions
- Query and Mutation classes
- Input types
- Flask integration
## Best Practices
**Do:**
- Use DataLoader to batch queries
- Implement query complexity limits
- Design schema around client needs
- Validate all inputs
- Use descriptive naming conventions
- Add subscriptions for real-time data
**Don't:**
- Allow deeply nested queries without limits
- Expose database internals
- Ignore N+1 query problems
- Return unauthorized data
- Skip input validation
© secondsky · MIT · secondsky/claude-skills