Навыки graphql
📦

graphql

Безопасно

Создание безопасных GraphQL API с использованием лучших практик

Гибкость GraphQL может привести к проблемам производительности и безопасности без надлежащего контроля. Этот навык предоставляет проверенные паттерны для использования DataLoader, ограничения глубины запросов и авторизации для создания готовых к продакшену GraphQL API.

Поддерживает: Claude Codex Code(CC)
📊 71 Адекватно
1

Скачать ZIP навыка

2

Загрузить в Claude

Перейдите в Settings → Capabilities → Skills → Upload skill

3

Включите и начните использовать

Протестировать

Использование «graphql». Проектирование схемы для каталога товаров электронной коммерции

Ожидаемый результат:

  • GraphQL схема с типами Product, Category и Review
  • Правильная nullability для необязательных полей, таких как discountPrice
  • Connections для пагинации отзывов о товарах
  • Mutations для CRUD операций с input типами

Использование «graphql». Исправление N+1 запросов в резолвере постов пользователя

Ожидаемый результат:

  • Реализация DataLoader, пакетирующая поиск по ID пользователя
  • Кэш с ключом по ID пользователя для предотвращения дублирующихся запросов
  • Интеграция с контекстом Apollo Server
  • Улучшение производительности от N запросов к 1 пакетированному запросу

Аудит безопасности

Безопасно
v1 • 2/25/2026

This skill is a documentation file containing GraphQL best practices and patterns. Static analysis flagged false positives: line 69 references related skills (not shell execution), and lines 3, 22, 34, 63, 72 contain markdown content (not cryptographic code). No executable code or security risks detected.

1
Просканировано файлов
73
Проанализировано строк
0
находки
1
Всего аудитов
Проблем безопасности не найдено
Проверено: claude

Оценка качества

38
Архитектура
100
Сопровождаемость
87
Контент
32
Сообщество
100
Безопасность
91
Соответствие спецификации

Что вы можете построить

Backend-разработчик, создающий новый API

Проектирование и реализация готового к продакшену GraphQL API с правильной оптимизацией производительности и контролем безопасности с самого начала.

Frontend-команда, интегрирующая GraphQL

Настройка Apollo Client с нормализованным кэшированием и эффективными паттернами выборки данных для React приложений.

Tech Lead, проверяющий существующий API

Выявление и исправление распространённых GraphQL антипаттернов, таких как отсутствие DataLoader, неограниченная глубина запросов и пробелы в авторизации.

Попробуйте эти промпты

Проектирование базовой GraphQL схемы
Создайте GraphQL схему для блога с типами User, Post и Comment. Включите правильную nullability, связи и распространённые CRUD операции в качестве queries и mutations.
Реализация DataLoader для предотвращения N+1
У меня есть GraphQL резолвер, который получает авторов для постов. Каждый резолвер поста делает отдельный запрос к базе данных. Покажите, как реализовать DataLoader для пакетирования и кэширования этих запросов.
Добавление ограничения глубины запросов
Настройте ограничение глубины запросов и анализ сложности для моего Apollo Server, чтобы предотвратить DoS-атаки от глубоко вложенных GraphQL запросов. Включите конфигурацию и обработку ошибок.
Реализация авторизации на уровне полей
Покажите, как реализовать авторизацию на уровне полей в GraphQL резолверах. Некоторые поля должны быть видны только аутентифицированным пользователям или пользователям с определёнными ролями.

Лучшие практики

  • Всегда используйте DataLoader для пакетирования запросов к базе данных и предотвращения проблем N+1
  • Ограничивайте глубину и сложность запросов для защиты от DoS-атак
  • Реализуйте авторизацию в резолверах, а не только в директивах схемы

Избегать

  • Прямые вызовы базы данных в резолверах без DataLoader
  • Разрешение неограниченной глубины запросов на вашем GraphQL эндпоинте
  • Полагание исключительно на директивы схемы для логики авторизации

Часто задаваемые вопросы

Зачем DataLoader необходим для GraphQL?
Без DataLoader каждый резолвер поля делает независимые запросы к базе данных. Один запрос, получающий 10 постов с их авторами, запускает 11 запросов (1 для постов, 10 для авторов). DataLoader пакетирует их в 2 запроса, значительно улучшая производительность.
Должна ли интроспекция быть включена в продакшене?
Как правило, нет. Интроспекция открывает всю структуру вашей схемы клиентам. Хотя это полезно для инструментов разработки, это может помочь злоумышленникам понять ваш API. Отключайте её в продакшене, если вам специально не нужна поддержка клиентских инструментов.
В чём разница между авторизацией схемы и резолвера?
Директивы схемы объявляют, кто может получить доступ к чему на уровне типа/поля. Авторизация резолвера реализует фактическую логику. Всегда реализуйте авторизацию в резолверах; одни только директивы могут быть обойдены или неправильно настроены.
Как обрабатывать ошибки против null данных в GraphQL?
Используйте правильную nullability в вашей схеме. Если поле может legitimately быть пустым, сделайте его nullable. Если оно должно иметь значение, сделайте его non-null. Когда non-null поле не удаётся, GraphQL обнуляет весь родительский объект, что может сломать запросы.
Какое ограничение глубины запроса мне использовать?
Начните с ограничения глубины 5-10 для большинства API. Мониторьте ваши легитимные запросы и соответствующим образом корректируйте. Также реализуйте анализ сложности запросов для обнаружения дорогих, но неглубоких запросов, которые обходят ограничения глубины.
Нужно ли очищать GraphQL подписки?
Да. Подписки поддерживают открытые соединения. Когда клиенты отключаются, убедитесь, что обработчики подписок на стороне сервера правильно очищены для предотвращения утечек памяти. Реализуйте очистку в ваших резолверах подписок, используя правильные хуки жизненного цикла.

Сведения для разработчиков

Автор

sickn33

Лицензия

MIT

Ссылка

main

Структура файлов

📄 SKILL.md