Skip to main content

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 \}
  }
}