我在我的服务器上使用Apollo,并且我正在尝试设计我的GraphQL GraphQL。我遇到的一个问题是,我是否应该更喜欢嵌套查询而不是根查询。
让我们在当前用户me
具有多个invitations
的示例中检查这两种方法。
根目录查询
me {
id
name
}
invitations {
id
message
}
invitations
的解析程序返回当前用户的邀请。
嵌套查询
me {
id
name
invitations {
id
message
}
}
除了使用后一种方法将邀请嵌套在用户对象me
中之外,这些方法应该可以实现相同的结果。但我担心的是,在保持缓存一致性方面,这是否能与Apollo客户端顺利地协同工作。
设计GraphQL查询的推荐方法是什么?
发布于 2019-01-07 05:33:39
我要说的是,这真的取决于具体情况。就我个人而言,我将嵌套属性视为上下文:如果API使用者想要获取我的通知,那么它就是me { notifications { ... } }
,而不是notifications { ... }
。如果有一个顶级的键是有意义的,例如,有一个全局通知的概念(不依赖于用户),那么就去做吧。如果每个用户都有自己的通知(我假设这是真的),那么User
类型的me
就应该有它,就像每个User
一样。这种泛化鼓励可重用的思考:在管理面板中,使用user(id: ...) { ... }
而不是me { ... }
,可以免费使用相同的UI代码。
根据经验,最好考虑使用该API,而不是提供它。
发布于 2019-01-04 01:34:43
GraphQL的卖点之一是允许客户端在最少的请求数量中灵活地定义他们想要查询的数据的形状。它们还鼓励开发人员在设计模式时使用"Think in Graphs“。
因此,我会选择看起来更像图的嵌套查询。此外,它的灵活性更高。如果用户想要在他们的邀请中获得他们的用户配置文件数据,他们可以只在一个请求中获得它们。如果他们只想获取配置文件数据,则只需忽略查询中的邀请部分,并且由于GraphQL的设计性质,服务器将不会浪费任何资源来获取邀请数据。
https://stackoverflow.com/questions/54026744
复制相似问题