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 database schema, only enriching the GraphQL API queries with inline fragments.
Currently, only OpenReader supports GraphQL interfaces defined in the schema file.
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 }
}
}