Interfaces
The schema file supports GraphQL Interfaces for modelling complex types sharing common traits. Interfaces are annotated with @query
at the type level and do not affect the backing database schema, only enriching the GraphQL API queries with inline fragments.
Examples
interface MyEntity @query {
id: ID!
name: String
ref: Ref
}
type Ref @entity {
id: ID!
name: String
foo: Foo! @unique
bar: Bar! @unique
}
type Foo implements MyEntity @entity {
id: ID!
name: String
ref: Ref @derivedFrom(field: "foo")
foo: Int
}
type Bar implements MyEntity @entity {
id: ID!
name: String
ref: Ref @derivedFrom(field: "bar")
bar: Int
}
type Baz implements MyEntity @entity {
id: ID!
name: String
ref: Ref
baz: Int
}
The MyEntity
interface above enables myEntities
and myEntitiesConnection
GraphQL API queries with inline fragments and the _type
, __typename
meta fields:
query {
myEntities(orderBy: [_type_DESC, id_ASC]) {
id
name
ref {
id
name
}
__typename
... on Foo { foo }
... on Bar { bar }
... on Baz { baz }
}
}