首页 > 解决方案 > 使用golang在graphql中递归

问题描述

我在 golang 中为 graphql 使用https://github.com/99designs/gqlgen,想要创建一个返回树状结构的 api,但是我想提供深度控制而不是在查询中编写嵌套选择。有没有办法做到这一点?想要实现这样的事情,

query listAll{
  node: getNodes(parentId: "1235") {
    ID
    Name
    node: Children @recursive(depth: 10) {
        ID
        Name
    }
  }
}

标签: gorecursiongraphql

解决方案


GraphQL 有一个明确要求你需要什么的原则;它没有“递归”指令。换句话说,如果您想要深度为 10 的节点,则必须编写一个包含 10 个嵌套的查询。显然,您可以从程序中动态生成任何您想要的查询文本。

如果您担心这些查询的潜在复杂性以及它们可能需要多少数据,请查看文档FixedComplexityLimit中描述的 gqlgen 扩展。

func main() {
    c := Config{ Resolvers: &resolvers{} }
        srv := handler.NewDefaultServer(blog.NewExecutableSchema(c))
        srv.Use(extension.FixedComplexityLimit(5)) // This line is key
    r.Handle("/query", srv)
}

推荐阅读