如何维持潜在的无限 Graphql 查询?

问题描述 投票:0回答:2

关于 Graphql,有一件事我一直不明白。我想我会通过给出一些例子来按问题进行绘画。

假设我有一个

Account
类型和一个
Chat
类型。一个
Account
可以有多个与之关联的
Chats
,但
Chat
只能与单个
Account
关联。该架构可能看起来像这样:

type Account {
  id: String!
  username: String!
  chats: [Chat!]!
}

type Chat {
  id: String!
  text: String!
  account: Account!
}

假设我提出以下疑问:

type Query {
  account(id: String!): Account
  accounts: [Account!]!
}

现在,我将查询我的架构:

accounts {
  id
  username
  chats {
    id
    text
  }
}

这是一个非常简单的查询 - 我只是想获取所有帐户的所有聊天记录。

但是如果我有像这样更深入的查询怎么办:

accounts {
  id
  username
  chats {
    id
    text
    account {
      id
      username
      chats {
        id
        text
      }
    }
  }
}

我知道在现实中,查询这些数据是很荒谬的,但是,这应该是可能的,对吗?

现在让我们将视角从 API 的使用者切换到 API 的实际开发者。 graphql 开发人员如何维持这些潜在的无限查询? Graphql 是否会自动解决这些问题(似乎没有)?或者我只是错过了什么?

感谢您的帮助。

graphql
2个回答
2
投票

graphql 开发人员如何维持这些潜在的无限查询?

不可能有“无限”嵌套查询。

GraphQL 模式应该是非循环的 - 这意味着类型之间的关系应该是单向的。

只是架构应基于客户端应用程序中的查询模式的规则。

因此,在

account
中嵌套
chat
仅意味着用例和顺序未正确定义。


0
投票

根据您使用的语言或技术,您可以使用以下库限制查询深度:

或者,您可以根据每个子查询的复杂性分配分数,并使用以下库限制整体复杂性:

© www.soinside.com 2019 - 2024. All rights reserved.