Graphql数据建模:扩展类型和接口

时间:2019-03-01 15:25:06

标签: graphql

这是一个非常基本的问题,但是如何调用扩展类型或接口?

所有文档都指向使用extend type Person添加基于Person的字段。

我希望它能像这样

Employee extend type Person {
   salary: Int!
}

但是文档显示它是这样的:

extend type Person{
   salary: Int!
}

那么,我该如何查询员工薪水?如果Person有多个扩展名,例如员工和房客?我想我可能会受到传统思维的束缚,但我希望扩展名能够带来一些可查询的名称。

1 个答案:

答案 0 :(得分:1)

extend关键字可有效地用于修改架构中的现有类型。这在两种情况下最常用:

1。连接表示单个模式的多个字符串。您可以将模式分解为多个文件,按域划分。然后,您可以执行以下操作:

#base.graphql
type Query {
  viewer: User
}

# user.graphql
extend type Query {
  users: [User!]!
}

# post.graphql
extend type Query {
  post: [Post!]!
}

这将产生与以下内容有效相同的模式:

type Query {
  viewer: User
  users: [User!]!
  post: [Post!]!
}

2。从基本架构扩展。您可能有多个建立在某些基本架构之上的架构。或者您可能是stitching together remote schemas。在这些情况下,我们经常想要添加特定于我们新模式的字段,这些字段在基本类型上不存在。这也可以用于实现基本架构中缺少的指令:

extend type SomeType @customDirective

extend关键字只能修改现有类型;它不是继承的手段。实际上, GraphQL不支持类型继承。接口提供了对现有类型的抽象级别,但是实现接口的类型不会从该接口继承任何字段。除非您使用graphql-s2s之类的库,否则无法做到这一点。