⚡ 编程实验室🏗️ HTML🎨 CSS⚡ JavaScript🐍 Python🗄️ SQL☕ Java⚛️ React💚 Vue🟢 Node.js⚙️ C语言🐘 PHP🐹 Go🔷 TypeScript🐬 MySQL🔧 C++🎯 C#🦀 Rust🅱️ Bootstrap💡 jQuery🎸 Django🍃 MongoDB👗 Sass🎪 Kotlin📊 R语言📋 XML📊 Excel🐘 PostgreSQL🐳 Docker🅰️ Angular🎮 游戏🏠 网站首页

嵌套查询成本分析:预防深度递归与 N+1 攻击

通过计算每个字段的权重(数据库查询次数、复杂度),动态拒绝或降级高成本查询。 · 难度:入门 · +10XP

嵌套查询成本分析

GraphQL 的灵活性允许恶意客户端构造深度嵌套查询导致数据库崩溃。本教程将实现一个成本分析中间件,计算每个字段的'权重'(例如,列表字段权重高,关联字段累加),并在执行前根据总成本阈值拒绝请求。我们将基于 graphql-query-complexity 库,并扩展它支持异步成本计算(例如根据数据量动态调整)。还会演示如何将成本信息通过 extensions 返回给客户端,用于优化查询。

const { getComplexity, simpleEstimator } = require('graphql-query-complexity');

const complexity = getComplexity({ schema, query: document, variables: {}, estimators: [ simpleEstimator({ defaultComplexity: 1 }), // 自定义字段成本 (args) => args.field.name === 'users' ? 10 : 1 ] }); if (complexity > 100) { throw new Error('Query too complex'); }

Ctrl+Enter
🚀 升级VIP
解锁全部课程+AI助手

🏆 学习排行

加载中...

📊 统计

📖 147 篇
0 完成
🔥 0