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?

上一篇:

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

下一篇:

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

我們有何不同?

API服務商零注冊

多API并行試用

數據驅動選型,提升決策效率

查看全部API→
??

熱門場景實測,選對API

#AI文本生成大模型API

對比大模型API的內容創意新穎性、情感共鳴力、商業轉化潛力

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

#AI深度推理大模型API

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

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