Я пытаюсь создать приложение на основе микросервисов, которое использует две удаленные схемы Prisma / GraphQL, которые работают в Docker, и шлюз, который анализирует их с помощью сшивания схем.
Схемы Prisma / GraphQL:
// Profile Schema service - http:localhost:3000/profile
type Profile {
id: ID!
user_id: ID!
firstName: String!
...
}
type Query {
findProfileById(id: ID!): Profile
findProfileByUserID(user_id: ID!): Profile
}
// User Schema service - http:localhost:5000/user
type User {
id: ID!
profileID: ID!
email: String!
...
}
type Query {
findUserById(id: ID!): User
findUserByProfileID(profileID: ID!): Profile
}
Теперь на сервере шлюза я могу успешно анализировать и объединять схемы с помощью инструментов graphql, и я добавил расширенные типы, чтобы разрешить отношения между двумя типами.
// LinkTypeDefs
extend type Profile {
user: User
}
extend type User {
userProfile: Profile
}
Я следил за документацией Apollo GraphQL по сшиванию схем с удаленными схемами, и это решатель, который у меня есть для теперь объединенных схем.
app.use('/gateway', bodyParser.json(), graphqlExpress({ schema: mergeSchemas({
schemas: [
profileSchema,
userSchema,
linkTypeDefs
],
resolvers: mergeInfo => ({
User: {
userProfile: {
fragment: `fragment UserFragment on User { id }`,
resolve(user, args, context, info) {
return delegateToSchema({
schema: profileSchema,
operation: 'query',
fieldName: 'findProfileByUserId',
args: {
user_id: user.id
},
context,
info
},
);
},
},
},
Profile: {
user: {
fragment: `fragment ProfileFragment on Profile { id }`,
resolve(profile, args, context, info) {
return delegateToSchema({
schema: authSchema,
operation: 'query',
fieldName: 'findUserByProfileId',
args: {
profileID: profile.id
},
context,
info
})
}
}
}
}),
})
}));
Проблема, с которой я сталкиваюсь, заключается в том, что каждый раз, когда я запрашиваю пользователя или профиль для их новых расширенных полей, он всегда возвращает значение null. Я убедился, что создал объект User с существующим profileId, а также с объектом Profile с существующим userId. Это образец результатов запроса
Я просматривал документы около недели, и, похоже, ничего не работает. Насколько я понимаю, все подключено правильно. Надеюсь, кто-то сможет помочь. У меня такое чувство, что это как-то связано с фрагментами. При необходимости я могу предоставить снимок экрана с объектами пользователя и профиля для более подробного разъяснения. Спасибо.
profile
в качестве первого параметра. Вы уверены, что в нем вообще есть какой-нибудь контент? GraphQL обрабатывает поля только в том случае, если корневое содержимое не равно нулю. Так что, возможно, он даже не обрабатывает преобразователь для этого поля и, следовательно, не делегирует схему. - person bazaglia   schedule 20.07.2018