技能 graphql
📦

graphql

安全

构建具备最佳实践的安全 GraphQL API

GraphQL 的灵活性可能导致性能和安全性问题,如果没有适当的控制。本技能提供了 DataLoader 使用、查询深度限制和授权的成熟模式,帮助构建可用于生产的 GraphQL API。

支援: Claude Codex Code(CC)
🥉 74 青銅
1

下載技能 ZIP

2

在 Claude 中上傳

前往 設定 → 功能 → 技能 → 上傳技能

3

開啟並開始使用

測試它

正在使用「graphql」。 为电子商务产品目录设计 schema

預期結果:

  • 包含 Product、Category 和 Review 类型的 GraphQL schema
  • 对 discountPrice 等可选字段的适当空值处理
  • 用于产品评论分页的 Connections
  • 带有输入类型的 CRUD 操作 mutations

正在使用「graphql」。 修复用户帖子解析器中的 N+1 查询

預期結果:

  • 批处理用户 ID 查找的 DataLoader 实现
  • 按用户 ID 键入缓存以防止重复查询
  • 与 Apollo Server context 集成
  • 性能从 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
內容
50
社群
100
安全
91
規範符合性

你能建構什麼

构建新 API 的后端开发者

从零开始设计和实现具有适当性能优化和安全控制的生产就绪 GraphQL API。

集成 GraphQL 的前端团队

为 React 应用程序设置具有标准化缓存和高效数据获取模式的 Apollo Client。

审核现有 API 的技术负责人

识别并修复常见的 GraphQL 反模式,如缺少 DataLoader、无限查询深度和授权漏洞。

試試這些提示

设计基础 GraphQL Schema
为包含 User、Post 和 Comment 类型的博客创建 GraphQL schema。包括适当的空值处理、关系和常见的 CRUD 操作作为 queries 和 mutations。
实现 DataLoader 防止 N+1
我有一个为用户获取帖子的 GraphQL 解析器。每个帖子解析器都进行单独的数据库查询。展示如何实现 DataLoader 来批处理和缓存这些查询。
添加查询深度限制
为我的 Apollo Server 设置查询深度限制和复杂度分析,以防止来自深度嵌套 GraphQL 查询的 DoS 攻击。包括配置和错误处理。
实现字段级授权
展示如何在 GraphQL 解析器中实现字段级授权。某些字段应该只对经过身份验证的用户或具有特定角色的用户可见。

最佳實務

  • 始终使用 DataLoader 批处理数据库查询并防止 N+1 问题
  • 限制查询深度和复杂度以防护 DoS 攻击
  • 在解析器中实现授权,而不仅仅依靠 schema 指令

避免

  • 在解析器中直接进行数据库调用而不使用 DataLoader
  • 允许 GraphQL 端点上的无限查询深度
  • 仅依赖 schema 指令进行授权逻辑

常見問題

为什么 GraphQL 需要 DataLoader?
如果没有 DataLoader,每个字段解析器都会进行独立的数据库查询。单个查询获取 10 篇帖子及其作者会触发 11 次查询(1 次获取帖子,10 次获取作者)。DataLoader 将这些批处理为 2 次查询,显著提高性能。
生产环境中应该启用 introspection 吗?
通常不需要。Introspection 会向客户端暴露整个 schema 结构。虽然对开发工具很有用,但它可以帮助攻击者了解你的 API。除非你特别需要客户端工具支持,否则在生产环境中禁用它。
schema 授权和解析器授权有什么区别?
Schema 指令在类型/字段级别声明谁可以访问什么。解析器授权实现实际逻辑。始终在解析器中实现授权;仅靠指令可能被绕过或配置错误。
如何在 GraphQL 中处理错误与 null 数据?
在 schema 中使用适当的空值处理。如果字段可以为空,将其设为 nullable。如果必须有值,将其设为 non-null。当 non-null 字段失败时,GraphQL 会将整个父对象设为 null,这可能会破坏查询。
我应该使用什么查询深度限制?
大多数 API 从 5-10 的深度限制开始。监控你的合法查询并相应调整。还要实现查询复杂度分析以捕捉绕过深度限制的昂贵但浅层的查询。
我需要清理 GraphQL 订阅吗?
是的。订阅保持开放连接。当客户端断开连接时,确保服务器端订阅处理程序得到适当清理以防止内存泄漏。使用适当的生命周期钩子在订阅解析器中实现清理。

開發者詳情

檔案結構

📄 SKILL.md