【问题标题】:GraphQL : Get children of specific implementationGraphQL:获取特定实现的子级
【发布时间】:2020-12-27 06:30:25
【问题描述】:

我得到一个带有“children”字段的 GraphQL 对象。 该字段属于“X”类型,并有两种不同的实现方式,“Y”和“Z”。

所以当我进行查询时,我可以这样做:

{
    fieldOne
    fieldTwo
    children {
        ... on Y {
            fieldOne
            fieldTwo
        }
        ... on Z {
            fieldOne
        }
    }
}

有没有办法让我只获得 Y 实现的孩子?

因为如果我这样做:

{
    fieldOne
    fieldTwo
    children {
        ... on Y {
            fieldOne
            fieldTwo
        }
    }
}

我会得到一个看起来像这样的对象:

{
    fieldOne
    fieldTwo
    children [
        {}, // Z implementation
        {}, // Z implementation
        {
            fieldOne,
            fieldTwo
        }, // Y implementation
    ]
}

谢谢你:)

【问题讨论】:

    标签: graphql


    【解决方案1】:

    您看到的是预期行为。来自spec:

    片段可以在选择集中内联定义。这样做是为了根据运行时类型有条件地包含字段。

    像... on Y 这样的类型条件只是一种根据运行时类型过滤哪些字段被解析的方法。它们不是过滤实际结果列表的方法。实际上,GraphQL 中没有内置过滤器。

    为了过滤列表以仅包含某些类型(或基于任何其他条件),相关字段需要具有某种过滤器参数和解析器逻辑,使用它来实际执行过滤。

    如果您使用第三方 API 并且架构不支持过滤,那么作为客户端,除了事后处理响应之外,您无能为力。

    【讨论】:

      猜你喜欢
      • 2021-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-27
      • 2023-02-25
      • 1970-01-01
      相关资源
      最近更新 更多