联合内的 GraphQL 联合
Posted
技术标签:
【中文标题】联合内的 GraphQL 联合【英文标题】:GraphQL Union within Union 【发布时间】:2019-07-02 03:28:46 【问题描述】:下面是一个概念上我正在寻找的查询。但是,我不知道如何实现......或者即使它是可能的。
query getMedia($id: ID!)
media(id: $id)
__typename
title
... on Movie
fps
... on Music
duration
... on Song
lyrics
... on Composition
movements
基本上,我有媒体类型,如果是音乐,则有不同类型的音乐。如果记录是“歌曲”,我希望这是响应:
"media":
"__typename": "Song",
"duration": 5.67,
"title": "Some Song",
"lyrics": "La de da de da de da de day oh",
这可能吗?
【问题讨论】:
【参考方案1】:需要明确的是,您的问题中出现的 media
字段必须是接口,而不是联合,因为它至少包含一个所有实现类型共有的字段 (title
)。无论如何,无论我们谈论的是接口还是联合,都不支持您建议的那种语法。只有对象类型可以实现接口。 Similarly:
Union 类型的成员类型必须都是 Object 基类型;标量、接口和联合类型不能是联合的成员类型。同样,包装类型也不能是 Union 的成员类型。
Movie
、Song
和Composition
都需要扩展Media
接口,然后就可以这样查询了:
query getMedia($id: ID!)
media(id: $id)
__typename
title
... on Movie
fps
... on Song
duration
lyrics
... on Composition
duration
movements
不幸的是,这确实意味着您的内联片段中有一些重复。好消息是,对象类型可以 implement multiple interfaces,并且实现接口并不排除它被包含在一个或多个联合中。因此,如果您需要它,您仍然可以创建一个 Music
接口或联合,并将其用作不同字段的返回类型。
【讨论】:
以上是关于联合内的 GraphQL 联合的主要内容,如果未能解决你的问题,请参考以下文章