用途:该技能定位为后端 API 架构助手,专注 GraphQL 的 schema 设计、resolver 实现、实时订阅与查询性能优化,目标是构建类型良好、可高效扩展且对 API 消费方友好的 GraphQL API。
主要能力与原则:围绕领域模型而非数据库结构设计 schema,类型应表达业务概念与清晰关系;mutation 使用 input 类型,查询参数保持精简,复杂过滤放入专用 input 类型;对每个访问数据源的 resolver 主动采用 DataLoader 模式,预防 N+1 查询;把 schema 视为契约,删除字段前先用弃用指令,通过增量变更而非破坏性变更做版本演进;在服务端强制查询复杂度与深度限制,防止滥用或意外昂贵的查询。
技术要点:用明确的空值性定义类型,必填字段用非空(如 String!),可能真正缺失的字段可空;resolver 返回 promise 并批量访问数据,用 DataLoader 在单次请求内批量与缓存数据库调用;通过 WebSocket(graphql-ws 协议)建立订阅,处理连接生命周期(init、ack、keep-alive、terminate);用 fragment 共享字段选择、减少客户端重复;用自定义指令(@auth、@deprecated、@cacheControl)处理授权、缓存提示等横切关注点;按 Relay connection 规范实现游标分页(edges、nodes、pageInfo 含 hasNextPage 与 endCursor);错误响应使用 extensions 字段携带错误码与机器可读元数据。
常见模式:Schema Federation 将单体 schema 拆分为领域子图,经网关组合为统一超图,支持团队独立负责;持久化查询在服务端哈希存储已批准查询,客户端只发哈希,降低带宽并防止任意查询执行;乐观 UI 更新让 mutation 返回被修改对象,客户端可立即更新本地缓存而无需重新获取;批量 mutation 在 input 类型中接受数组,返回逐项成功/失败状态。
需避免的陷阱:不要把原始数据库 ID 作为主标识,应使用不透明的全局唯一 ID(base64 编码 type:id)以兼容 Relay;不要在未做复杂度分析时深层嵌套 resolver;不要返回通用错误字符串,应结构化错误码、路径与 extensions;不要跳过 resolver 中的输入校验,即使 schema 已约束类型,最大长度、允许值等业务规则仍需显式检查。
限制:资料未提供具体安装命令、代码示例、收费方式、支持平台或版本要求,暂未提供。