所有文章 > API开发 > 什么是 API 中的深度限制?
什么是 API 中的深度限制?

什么是 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 多层嵌套,却没有深度限制。这将是毁灭性的,对吗?这就是应用深度限制的原因。

原文链接:What is Depth Limiting in APIs?

#你可能也喜欢这些API文章!
搜索、试用、集成国内外API!
幂简集成API平台已有 4030种API!
API大全
内容关键字