如何维持可能无限的 Graphql 查询?

How to sustain potentially infinite Graphql queries?

关于 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 会自动解决这些问题吗(似乎不会)?还是我只是遗漏了什么?

感谢您的帮助。

How is the graphql developer meant to sustain these, potentially, infinite queries?

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

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

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

所以在 chat 中嵌套 account 仅仅意味着用例和序列没有正确定义。