Ваш вопрос не показывает ваш существующий код для шлюза API, но я предполагаю, что вы сшиваете свои схемы , как описано в документации .Схема каждой службы должна содержать только те поля, которые соответствуют ее конкретному домену.Например, схема службы сообщений не должна содержать ссылок на пользователей.Когда вы объединяете свои схемы, вы затем расширяете существующих типов, предоставляя дополнительные поля, которые связывают ваши различные сервисы.
const extensions = `
extend type User {
posts
}
extend type Post {
user
}
`
const mergedSchema = mergeSchemas({
schemas: [
usersSchema,
postsSchema,
extensions,
],
resolvers: {
User: {
posts: {
fragment: `... on User { id }`,
resolve(user, args, context, info) {
return info.mergeInfo.delegateToSchema({
schema: postsSchema,
operation: 'query',
fieldName: 'posts',
args: {
userId: user.id,
},
context,
info,
});
},
},
},
Post: {
user: {
fragment: `... on Post { userId }`,
resolve(post, args, context, info) {
return info.mergeInfo.delegateToSchema({
schema: postsSchema,
operation: 'query',
fieldName: 'user',
args: {
id: post.userId,
},
context,
info,
});
},
},
},
},
});
Здесь мы расширяем тип User
из службы пользователей, чтобы включить поле posts
.Мы используем delegateToSchema
, чтобы указать, что это дополнительное поле на самом деле должно быть разрешено схемой службы сообщений путем запроса posts
и передачи идентификатора пользователя в качестве аргумента userId
(фактические имена полей и аргументов должны соответствовать вашим схемам).Аналогичным образом мы добавляем поле user
к каждому Post
и делегируем разрешение этого поля в схему обслуживания пользователей.
Пожалуйста, проверьте документы для получения дополнительной информации.