什么是 API 中的深度限制?
速率限制是一种限制向 API 发送请求的方法。但 GraphQL API 还有另一种限制请求的方法,称为深度限制(depth limiting),它根据请求的深度来限制查询。
如果应用程序接口在一定时间内收到过多的请求,它们的运行速度就会减慢甚至崩溃。请求限制功能允许API提供商通过控制请求数量来保证其应用程序接口为所有用户运行。
同样,如果查询过于复杂,GraphQL API 也会变慢或崩溃,我们可以使用深度限制来解决这个问题。接下来,让我们先快速了解一下 GraphQL API。
GraphQL APIs
GraphQL 是一种查询语言,是数据查询和操作的 API 标准。GraphQL 查询可实现声明式数据获取,并只暴露一个端点,您可以用它来获取数据。
要了解 GraphQL 如何工作,可以将其视为一个图形。当被请求时,它会暴露图中的一条 “边”,也就是一个端点。
Depth Limiting
深度限制(Depth Limiting)根据深度限制 GraphQL 操作,以避免大型嵌套查询。正如我们前面所讨论的,GraphQL 允许你通过字段嵌套来指定所需的精确数据。虽然这是一个优点,但也可能是一个缺点。请看下面的查询:
{
user(id: '12') { # depth 0
posts { # depth 1
title
}
}
}
它获取用户所有帖子的标题。使用嵌套通过user和posts字段来获取它们的标题。
GraphQL 的设计允许查询无限增长。假设我们有User一个包含帖子列表的类型。
{
user(id: "12") {
posts {
title
}
}
}
该Posts类型还允许像这样获取用户:
{
posts(id: "12") {
user {
name
}
}
}
攻击者可以利用这种嵌套创建类似的复杂循环查询,如下所示:
query badQuery { # depth 0
user(id: "12") { # depth 1
posts { # depth 2
user { # depth 3
name
posts { # depth 4
user { # depth 5
posts { # depth 6
title
user { # depth 7
# and more..
}
}
}
}
}
}
}
}
正如您所看到的,这个查询有好几层,会形成一个大循环。像这样的查询计算成本很高,可能会导致 API 无法响应。因此,我们可以应用深度限制来保护 API 免受影响。
您可以设置一个特定的数字(如 7)来限制 API 的嵌套深度。这样,如果查询的嵌套层级超过 7 级,就会被拒绝。想象一下,如果一个恶意查询有 100 多层嵌套,却没有深度限制。这将是毁灭性的,对吗?这就是应用深度限制的原因。
最新文章
- 2025年Prompt Chaining:您需要了解的一切 – YourGPT
- api 认证与授权的最佳实践
- 什么是GraphRAG
- 如何获取 Notion 开放平台 API Key 密钥(分步指南)
- DeepSeek-R1 调用 MCP 天气API服务教程:MCP 客户端与服务端入门
- 旅游供应商的Travel Booking APIs [Onix概览]
- 使用 Web Share API 实现图片分享
- 学习与设计rest api的顶级资源
- 十大企业级 API 管理工具全景指南
- Meta×Google 云计算协议:2025 多云/混合云 API 极速落地 AI 出海成本降 40%
- Kimi Chat API入门指南:从注册到实现智能对话
- 5种最佳API认证方法,显著提升…