user(id: '12') { # depth 0
posts { # depth 1
title
}
}
}

它獲取用戶所有帖子的標(biāo)題。使用嵌套通過user和posts字段來獲取它們的標(biāo)題。

GraphQL 的設(shè)計允許查詢無限增長。假設(shè)我們有User一個包含帖子列表的類型。

{
user(id: "12") {
posts {
title
}
}
}

該Posts類型還允許像這樣獲取用戶:

{
posts(id: "12") {
user {
name
}
}
}

攻擊者可以利用這種嵌套創(chuàng)建類似的復(fù)雜循環(huán)查詢,如下所示:

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..
}
}
}
}
}
}
}
}

正如您所看到的,這個查詢有好幾層,會形成一個大循環(huán)。像這樣的查詢計算成本很高,可能會導(dǎo)致 API 無法響應(yīng)。因此,我們可以應(yīng)用深度限制來保護(hù) API 免受影響。

您可以設(shè)置一個特定的數(shù)字(如 7)來限制 API 的嵌套深度。這樣,如果查詢的嵌套層級超過 7 級,就會被拒絕。想象一下,如果一個惡意查詢有 100 多層嵌套,卻沒有深度限制。這將是毀滅性的,對嗎?這就是應(yīng)用深度限制的原因。

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

上一篇:

OpenAPI vs RAML vs API Blueprint,誰是最后的贏家?

下一篇:

調(diào)用 GraphQL API 需要做的 4 件事
#你可能也喜歡這些API文章!

我們有何不同?

API服務(wù)商零注冊

多API并行試用

數(shù)據(jù)驅(qū)動選型,提升決策效率

查看全部API→
??

熱門場景實測,選對API

#AI文本生成大模型API

對比大模型API的內(nèi)容創(chuàng)意新穎性、情感共鳴力、商業(yè)轉(zhuǎn)化潛力

25個渠道
一鍵對比試用API 限時免費

#AI深度推理大模型API

對比大模型API的邏輯推理準(zhǔn)確性、分析深度、可視化建議合理性

10個渠道
一鍵對比試用API 限時免費