关于 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 开发人员如何维持这些潜在的无限查询?
不可能有“无限”嵌套查询。
GraphQL 模式应该是非循环的 - 这意味着类型之间的关系应该是单向的。
只是架构应基于客户端应用程序中的查询模式的规则。
因此,在
account
中嵌套 chat
仅意味着用例和顺序未正确定义。
根据您使用的语言或技术,您可以使用以下库限制查询深度:
或者,您可以根据每个子查询的复杂性分配分数,并使用以下库限制整体复杂性: