GraphQL:嵌套查询与根查询

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (650)

我在我的服务器上使用Apollo GraphQL,我正在尝试设计我的GraphQL API。我遇到的一个问题是我是否应该更喜欢嵌套查询而不是root查询。

让我们在这个示例中检查当前用户me有多个invitations

根查询

me {
    id
    name
}

invitations {
    id
    message
}

用于invitations返回当前用户邀请的解析器。

嵌套查询

me {
    id
    name
    invitations {
        id
        message
    }
}

这些应该实现相同的结果,除了me使用后一种方法嵌套在用户对象中的邀请。我担心的是,如果这与Apollo Client顺利运行以保持缓存一致。

设计GraphQL查询的推荐方法是什么?

提问于
用户回答回答于

我觉得这真的取决于案例。就个人而言,我将嵌套属性视为上下文:如果API使用者想要获取我的通知,那么它me { notifications { ... } }不是notifications { ... }。例如,如果有一个顶级密钥是有意义的,那么就有一个全局通知的概念(不依赖于用户),那就去做吧。如果每个用户都有自己的通知(我认为是真的),那么me类型User应该拥有它,就像每个用户User一样。这种概括鼓励可重复使用的思维:管理面板,user(id: ...) { ... }而不是me { ... }使用的管理面板,可以免费使用相同的UI代码。

根据经验,最好考虑使用该API,而不是提供它。

用户回答回答于

GraphQL的一个卖点是允许客户端具有非常大的灵活性,可以在最小化的请求数中定义要查询的数据的形状。他们还鼓励开发人员在设计架构时“ 思考图形 ”。

所以,我会选择看起来更像图形的嵌套查询。此外,它更灵活。如果用户希望通过邀请获取用户个人资料数据,他们只能在一个请求中获取这些数据。如果他们只想获取配置文件数据,他们只是忽略查询中的邀请部分,由于GraphQL的设计性质,服务器不会浪费任何资源来获取邀请数据。

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励