GraphQL:嵌套查询与根查询

nom*_*oda 7 apollo graphql

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

让我们在此示例中检查两者,其中当前用户me有许多invitations

根查询

me {
    id
    name
}

invitations {
    id
    message
}
Run Code Online (Sandbox Code Playgroud)

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

嵌套查询

me {
    id
    name
    invitations {
        id
        message
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

Rad*_*nik 5

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

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