Graphql - 如何包含其他类型的模式
Graphql - How to include schema from other types
假设我有以下类型:
type Foo {
id: ID!
field1: String
}
现在,我想定义另一种类型,其中包括较早的类型。像这样:
type Bar {
...Foo,
field2: String
}
如何在 graphql 中实现上述目标?我想基本上首先创建一个类型,然后将该类型包含在其他类型的定义中,这样我就不必多次键入所有属性。
我正在使用 Amplify/AWS Appsync,所以如果有任何我可以使用的特殊指令也会有所帮助
GraphQL 有概念 interfaces for this. Appsync, AWS's GraphQL implementation, supports interfaces。
[编辑:]GraphQL 不支持接口的“...spread”语法。字段是明确定义的。 Spread 语法确实出现在 GraphQL 中,但是以 Fragments 的形式,用于减少查询重复的字段的可重用单元。
interface Character {
id: ID!
name: String!
friends: [Character]
appearsIn: [Episode]!
}
type Human implements Character {
id: ID!
name: String!
friends: [Character]
appearsIn: [Episode]!
starships: [Starship]
totalCredits: Int
}
type Droid implements Character {
id: ID!
name: String!
friends: [Character]
appearsIn: [Episode]!
primaryFunction: String
}
Amplify 会自动创建 AppSync 架构、解析器和数据源,这显然是一个更困难的故事。 amplify-cli
存储库有一个开放的功能请求,Does the GraphQL Transformer support interfaces?。我不是 Amplify 专家,但快速浏览 loooong 功能请求评论线程表明 Amplify 的答案是 “不是 out-of-the-box”,但 “也许在狭窄的环境或高级定制下工作".
假设我有以下类型:
type Foo {
id: ID!
field1: String
}
现在,我想定义另一种类型,其中包括较早的类型。像这样:
type Bar {
...Foo,
field2: String
}
如何在 graphql 中实现上述目标?我想基本上首先创建一个类型,然后将该类型包含在其他类型的定义中,这样我就不必多次键入所有属性。
我正在使用 Amplify/AWS Appsync,所以如果有任何我可以使用的特殊指令也会有所帮助
GraphQL 有概念 interfaces for this. Appsync, AWS's GraphQL implementation, supports interfaces。
[编辑:]GraphQL 不支持接口的“...spread”语法。字段是明确定义的。 Spread 语法确实出现在 GraphQL 中,但是以 Fragments 的形式,用于减少查询重复的字段的可重用单元。
interface Character {
id: ID!
name: String!
friends: [Character]
appearsIn: [Episode]!
}
type Human implements Character {
id: ID!
name: String!
friends: [Character]
appearsIn: [Episode]!
starships: [Starship]
totalCredits: Int
}
type Droid implements Character {
id: ID!
name: String!
friends: [Character]
appearsIn: [Episode]!
primaryFunction: String
}
Amplify 会自动创建 AppSync 架构、解析器和数据源,这显然是一个更困难的故事。 amplify-cli
存储库有一个开放的功能请求,Does the GraphQL Transformer support interfaces?。我不是 Amplify 专家,但快速浏览 loooong 功能请求评论线程表明 Amplify 的答案是 “不是 out-of-the-box”,但 “也许在狭窄的环境或高级定制下工作".