什么是 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 多层嵌套,却没有深度限制。这将是毁灭性的,对吗?这就是应用深度限制的原因。
热门API
- 1. AI文本生成
- 2. AI图片生成_文生图
- 3. AI图片生成_图生图
- 4. AI图像编辑
- 5. AI视频生成_文生视频
- 6. AI视频生成_图生视频
- 7. AI语音合成_文生语音
- 8. AI文本生成(中国)
最新文章
- 什么是Unified API?基于未来集成的访问
- 使用JWT和Lambda授权器保护AWS API网关:Clerk实践指南
- 宠物领养服务:如何帮流浪毛孩找到温馨的新家?
- Python调用IP地址归属地查询API教程
- Java API 开发:构建可重用的接口,简化系统集成
- Python 实现检测空气质量:实时监测城市空气污染指数
- 亚马逊礼品卡API全解析:企业激励与客户参与优化指南
- 地理实时地图:技术解析与现代应用实践
- Duolingo API 使用指南:语言学习与智能应用的融合实践
- 超级英雄尽在掌握:超级英雄数据API的超能力
- 了解API端点:初学者指南
- API版本控制:URL、标头、媒体类型版本控制