У меня есть тип пользователя graphql, которому нужна информация от нескольких API REST и разных серверов. Basi c пример: получить имя пользователя из остального домена 1 и получить фамилию из остального домена 2. Оба остальных домена имеют общий атрибут "userID".
Простой пример кода моего преобразователя atm:
user: async (_source, args, { dataSources }) => {
try {
const datasource1 = await dataSources.RESTAPI1.getUser(args.id);
const datasource2 = await dataSources.RESTAPI2.getUser(args.id);
return { ...datasource1, ...datasource2 };
} catch (error) {
console.log("An error occurred.", error);
}
return [];
}
Это прекрасно работает для этой простой версии, но у меня есть 2 проблемы с этим решением: во-первых, в IRL много логик c, которые объединяются в результаты 2 json. Поскольку некоторые поля являются общими, но имеют разные данные (или являются пустыми). Так что это как вишня, выбирающая оба результата, чтобы создать объединенный результат.
Моя вторая проблема заключается в том, что это все еще метод водопада. Сначала получите данные от restapi1, когда это будет сделано, вызовите restapi2. По сути, apollo-server повторно вводит rest-waterfall-fetch, который пытается решить graphql.
Помня об этих двух проблемах. Могу ли я оптимизировать этот фрагмент кода или переписать его для лучшей производительности или читабельности? Или есть какие-нибудь пакеты, которые могут помочь с этим поведением?
Большое спасибо!