Я пытаюсь сделать мою схему GraphQL компонуемой через схему сшивания , но я пытаюсь найти способ разрешить свойства типов из другой части.
Вот схема перед разложением:
type Referee {
id: ID!
stringProp: String!
}
type Referer {
id: ID!
pointer: Referee!
}
type Query {
referers: [Referer]
}
Оба типа имеют средства разрешения в своих соответствующих схемах, которые расширяют объект { id }
до { id, stringProp }
или { id, pointer: { id } }
, так что запрос
query FromSingleSchema {
referers: {
id
pointer {
id
stringProp
}
}
}
разрешается как ожидалось; Query.referers
разрешается в список [{id}]
объектов, и каждый из них, в свою очередь, сначала разрешается в Referer
, а затем извлекает Referee
, на который указывает указатель, через распознаватели типов.
Теперь я пытаюсь разложить схему:
// schema A
type Referee {
id: ID!
stringProp: String!
}
// schema B
type Referer {
id: ID!
}
type Query {
referers: [Referer]
}
// schema Extensions
extend type Referer {
pointer: Referee!
}
и составить его снова:
// both schemaA and schemaB have been created with makeExecutableSchema
import schemaA from './A'
import schemaB from './B'
// schemaExtensions is just a raw GraphQL string
// resolverExtensions is shown below
import { schemaExtensions, resolverExtensions } from './B'
const schema = mergeSchemas({
schemas: [schemaA, schemaB, schemaExtensions],
resolvers: Object.assign({}, resolverExtensions)
})
// resolverExtensions defined as follows:
{
Referer: {
pointer: {
fragment: 'fragment IdFragment on Referee { id }',
resolve: o => ({ id: o.pointerId })
}
}
}
С этим я могу выполнить этот запрос без проблем:
query OnlyIdFromDecomposedSchemas {
referers: {
id
pointer {
id
}
}
}
но это не удается
query FullRefereeFromDecomposedSchemas {
referers: {
id
pointer {
id
stringProp
}
}
}
с сообщением об ошибке
Невозможно вернуть ноль для необнуляемого поля Referee.stringProp.
Что мне нужно сделать, чтобы преобразователь типа для Referee
мог заполнить остальные свойства, как только { id }
станет доступным, как это происходит в одной неразложенной схеме?