接口扩展了 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
    
  

只要存在至少一个同时实现NodePet 实现,这是一个有效的查询(事实上,Pet 接口实际上根本不需要id: ID! 字段)。

【讨论】:

您的答案详细而有用,但您仍然应该编辑它。问题是关于扩展接口而不是实现它们。也许编辑类似于“......今天这个问题的答案仍然是否,尽管接口可以实现其他接口”就足够了?我还建议添加刚刚发布的graphql-js@15.0.0。 > 问题是关于扩展接口而不是实现它们。扩展和实现之间的区别在这里似乎相当迂腐。最初的问题使用了扩展这个词,但给出的代码示例实际上会被归类为接口实现其他接口。 在某些方面你是对的,但已经有另一个关于在 graphql 中实现接口的问题,adnan.mujkic 特别评论说他的问题不是它的重复。 虽然在某些方面我必须同意你的看法。我个人看不出在 graphql 中实现和扩展接口之间的区别。如果它在其他地方,则接口无法实现另一个接口。它通常用于上课。他提到的问题是关于实现接口的类型......总而言之,正如你所说,我可能是迂腐的:)

以上是关于接口扩展了 GraphQL Schema 中的多个接口的主要内容,如果未能解决你的问题,请参考以下文章

GraphQL 中的 `schema` typedef 有啥用?

有没有办法为两个或多个 GraphQL 服务生成聚合的 schema.json?

如何扩展 GraphQL 调用的上下文对象?

将内容类型导入 Meteor 中的 schema.graphql

无法从模式拼接中的另一个 schema.graphql 文件中的其他 schema.graphql 文件访问共享模式

GraphQL Schema 定义语言中的别名类型