接口扩展了 GraphQL Schema 中的多个接口
Posted
技术标签:
【中文标题】接口扩展了 GraphQL Schema 中的多个接口【英文标题】:Interface extends multiple interfaces in GraphQL Schema 【发布时间】:2020-01-13 06:17:02 【问题描述】:在 GraphQL 中,一个接口可以扩展多个其他接口吗? 我需要这样的东西:
interface A
valueA: String
interface B
valueB: String
interface C extend interface A & B
valueA: String
valueB: String
type D implements C
valueA: String
valueB: String
Is it possible to implement multiple interfaces in GraphQL? 提供的解决方案是指一种type实现多个接口,而不是一个interface扩展多个interfaces
【问题讨论】:
这里的answere 指的是一个实现多个接口的类型...请不要将其标记为重复,因为这是不同类型的问题..请仔细看我的描述。我需要一个 interface 扩展多个接口,而不是一个 type 实现多个接口。Tnx 【参考方案1】:只有类型可以实现一个接口。一个接口不能实现另一个接口。您可以看到定义为here 的接口的语法,它明显缺少here 中显示的ImplementsInterfaces
定义。
【讨论】:
奇怪的是不可能做到interface B extends AnotherInterface
和type A implements B
【参考方案2】:
当被问到这个问题时,答案是不,接口不可能扩展(或实现)其他接口。
今天这个问题的答案是 是的,接口可以实现其他接口,但该功能尚未在任何开源 GraphQL 服务器中实现。
RFC allowing interfaces to implement other interfaces 于 2020 年 1 月 10 日合并。此规范的 graphql-js 实现于 2019 年 10 月 8 日合并,但尚未发布(最终将发布为 graphql-js@15.0 .0)。
对于某些用例,可以通过具有实现多个接口的类型来模拟此功能。例如,考虑以下架构:
interface Node
id: ID!
# Ideally we'd like to write `interface Pet implements Node`
# but that's not possible (yet)
interface Pet
id: ID!
name: String!
type Cat implements Node, Pet
id: ID!
name: String!
prefersWetFood: Boolean!
那么我们就可以实际编写查询了
query
node(id: "sylviathecat")
... on Pet
name
只要存在至少一个同时实现Node
的Pet
实现,这是一个有效的查询(事实上,Pet
接口实际上根本不需要id: ID!
字段)。
【讨论】:
您的答案详细而有用,但您仍然应该编辑它。问题是关于扩展接口而不是实现它们。也许编辑类似于“......今天这个问题的答案仍然是否,尽管接口可以实现其他接口”就足够了?我还建议添加刚刚发布的graphql-js@15.0.0。 > 问题是关于扩展接口而不是实现它们。扩展和实现之间的区别在这里似乎相当迂腐。最初的问题使用了扩展这个词,但给出的代码示例实际上会被归类为接口实现其他接口。 在某些方面你是对的,但已经有另一个关于在 graphql 中实现接口的问题,adnan.mujkic 特别评论说他的问题不是它的重复。 虽然在某些方面我必须同意你的看法。我个人看不出在 graphql 中实现和扩展接口之间的区别。如果它在其他地方,则接口无法实现另一个接口。它通常用于上课。他提到的问题是关于实现接口的类型......总而言之,正如你所说,我可能是迂腐的:)以上是关于接口扩展了 GraphQL Schema 中的多个接口的主要内容,如果未能解决你的问题,请参考以下文章
GraphQL 中的 `schema` typedef 有啥用?
有没有办法为两个或多个 GraphQL 服务生成聚合的 schema.json?
将内容类型导入 Meteor 中的 schema.graphql