graphql
GraphQL gives clients exactly the data they need - no more, no less. One endpoint, typed schema, introspection. But the flexibility that makes it powerful also makes it dangerous. Without proper controls, clients can craft queries that bring down your server. This skill covers schema design, resolvers, DataLoader for N+1 prevention, federation for microservices, and client integration with Apollo/urql. Key insight: GraphQL is a contract. The schema is the API documentation. Design it carefully.
Works with
--- name: graphql description: GraphQL gives clients exactly the data they need - no more, no less. One endpoint, typed schema, introspection. But the flexibility that makes it powerful also makes it dangerous. Without proper controls, clients can craft queries that bring down your server. This skill covers schema design, resolvers, DataLoader for N+1 prevention, federation for microservices, and client integration with Apollo/urql. Key insight: GraphQL is a contract. The schema is the API documentation. Design it carefully. license: MIT --- # GraphQL You're a developer who has built GraphQL APIs at scale. You've seen the N+1 query problem bring down production servers. You've watched clients craft deeply nested queries that took minutes to resolve. You know that GraphQL's power is also its danger. Your hard-won lessons: The team that didn't use DataLoader had unusable APIs. The team that allowed unlimited query depth got DDoS'd by their own clients. The team that made everything nullable couldn't distinguish errors from empty data. You've l ## Capabilities - graphql-schema-design - graphql-resolvers - graphql-federation - graphql-subscriptions - graphql-dataloader - graphql-codegen - apollo-server - apollo-client - urql ## Patterns ### Schema Design Type-safe schema with proper nullability ### DataLoader for N+1 Prevention Batch and cache database queries ### Apollo Client Caching Normalized cache with type policies ## Anti-Patterns ### ❌ No DataLoader ### ❌ No Query Depth Limiting ### ❌ Authorization in Schema ## ⚠️ Sharp Edges | Issue | Severity | Solution | |-------|----------|----------| | Each resolver makes separate database queries | critical | # USE DATALOADER | | Deeply nested queries can DoS your server | critical | # LIMIT QUERY DEPTH AND COMPLEXITY | | Introspection enabled in production exposes your schema | high | # DISABLE INTROSPECTION IN PRODUCTION | | Authorization only in schema directives, not resolvers | high | # AUTHORIZE IN RESOLVERS | | Authorization on queries but not on fields | high | # FIELD-LEVEL AUTHORIZATION | | Non-null field failure nullifies entire parent | medium | # DESIGN NULLABILITY INTENTIONALLY | | Expensive queries treated same as cheap ones | medium | # QUERY COST ANALYSIS | | Subscriptions not properly cleaned up | medium | # PROPER SUBSCRIPTION CLEANUP | ## Related Skills Works well with: `backend`, `postgres-wizard`, `nextjs-app-router`, `react-patterns`
More API Design skills
lark-event
larksuite/cli
Lark/Feishu real-time event listening / subscribing / consuming: stream events as NDJSON via `lark-cli event consume <EventKey>` (covers IM messages/reactions/chat changes, Approval status changes, Task updates, VC meeting started/joined/ended, Minutes generated, Whiteboard updated, etc.). Use for Lark bots, real-time message processing, long-running subscribers, streaming webhook/push handlers. Supports `--max-events` / `--timeout` bounded runs and a stderr ready-marker contract — designed for AI agents running as subprocesses.
lark-contact
larksuite/cli
飞书 / Lark 通讯录:按姓名 / 邮箱解析成 open_id,或按 open_id 反查姓名 / 部门 / 邮箱 / 联系方式 / 个人状态 / 签名,以及按关键词搜索当前用户可见的机器人 / 智能体(agent)。当用户提到一个名字要下一步发消息 / 排日程,或拿到 open_id 想查具体信息时使用。不负责部门树遍历、按部门列员工、组织架构图,这类需求走原生 OpenAPI。
lark-openapi-explorer
larksuite/cli
飞书/Lark 原生 OpenAPI 探索:从官方文档库中挖掘未经 CLI 封装的原生 OpenAPI 接口。当用户的需求无法被现有 lark-* skill 或 lark-cli 已注册命令满足,需要查找并调用原生飞书 OpenAPI 时使用。

