如何在联盟中查询具有不同类型的相同字段?

时间:2019-10-14 15:25:09

标签: graphql

我有以下型号

type Duck {
    category: Baz
}

type Foo {
    size: FooSize
}

type Bar {
    size: BarSize
}

union Baz = Foo | Bar

以下查询引发错误Validation error of type FieldsConflict: size: they return differing types FooSize and BarSize @ 'duck/category'(这是预期的行为,如此处所述:https://github.com/graphql/graphql-js/issues/53

{
  duck {
    category {
      ... on Foo {
        size
      }
      ... on Bar {
        size
      }
    }
  }
}

size上的别名可以使查询正常工作,但是我不能在这里使用它们,因为查询结果将被传递回另一个API,该API期望Duck.category拥有一个恰好名为{ {1}}。

我可以在这里使用任何解决方法或架构重构来使它正常工作吗?

1 个答案:

答案 0 :(得分:0)

从总体上讲,您只能做三件事来解决该错误:

  • 重构架构,以使size字段对于这两种类型而言都是相同的类型。
  • 别名一个或两个字段。
  • 仅请求字段提供一种类型。

如果您需要将响应传递给另一个API,最简单的方法是使用别名,然后在将响应发送到API之前转换客户端的响应。