GraphQL:嵌套查询与根查询

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

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

让我们检查一下这个示例中的两个,其中当前用户

me
有很多
invitations

根查询

me {
    id
    name
}

invitations {
    id
    message
}

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

嵌套查询

me {
    id
    name
    invitations {
        id
        message
    }
}

这些应该实现相同的结果,除了在后一种方法中邀请嵌套在用户对象中

me
。我关心的是这是否能与 Apollo Client 顺利配合并保持缓存一致。

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

graphql apollo
2个回答
6
投票

我想说这确实取决于具体情况。就我个人而言,我将嵌套属性视为上下文:如果API使用者想要获取我的通知,那么它是

me  { notifications { ... } }
,而不是
notifications { ... }
。例如,如果有一个顶级密钥是有意义的,有一个“全局”通知的概念(不依赖于用户),那么就使用它。如果每个用户都有自己的通知(我认为这是正确的),那么 me 类型的
User
应该有它,就像每个
User
一样。这种概括鼓励可重用的思维:使用
user(id: ...) { ... }
而不是
me { ... }
的管理面板可以免费使用相同的 UI 代码
根据经验,最好考虑使用该 API,而不是提供它。

GraphQL 的卖点之一是允许客户端非常灵活地以最少的请求数量定义他们想要查询的数据的形状。他们还鼓励开发人员在设计模式时“

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