Interfaces

Extract interfaces and query multiple types in a single query

Interfaces are useful when several entity types share some set of properties and one would like to have an aggregated result when such a common property is queried.

This is achieved through the natively supported GraphQL interface type and inline fragments in the output schema. For example, let us define the following input schema:

interface Profile @entity {
    about: String!
}

type Member implements Profile @entity {
    about: String!
    handle: String!
}

type Account implements Profile @entity {
    about: String!
    accountId: Bytes   
}

Note that interfaces should be decorated with @entity and all the subclasses must explicitly define the inherited fields (otherwise an error will be thrown during the codegen).

The output schema will support a query by about which puts together Member and Account types. Note that orderBy is also supported for the inherited properties as well as OpenCRUD.

query {
  profiles(limit: 5, offset: 5, orderBy: about_ASC, where: { about_eq: "joystreamer" }) {
    about
    __typename 
    ... on Member {
      handle
    }
    ... on Account {
      accountId
    }
  }
}

Last updated