Федерация Apollo: как получить доступ к данным из запроса ввода через федеративные службы через преобразователь
Ищете возможность присоединиться к ответу API graphQL с использованием федерации Apollo, где API Graphql построены поверх служб POST.
Чтобы объяснить мой вариант использования, я создал ниже фиктивный пример.
Две службы POST
- Пользовательское обслуживание и
- Почтовая служба
Запрос на UserService
{
userid : "13242"
}
Ответ от UserService
{
userName,
email,
dateOfBirth,
postIds []
}
Запрос на PostService
{
postId: "13242", // this is from UserService Response
memberInfo: { // this will come from client
memberid : "34343",
memberGroup : "mg-8798",
memberLocation : "LOc-87"
},
groupInfo: { // this will come from client
GroupId : "87980"
GroupInfo : "some group Info"
}
}
Почтовой службе требуются PostIds из UserService Response, а также memberInfo и GroupInfo из ввода шлюза (ввод от клиента).
В моем текущем преобразователе у меня нет никакой информации, кроме postId,
{
user: {
posts(user) {
return user.posts.map(postId => ({ __typename: "Post", postId }));
}
}
}
Как мне написать преобразователь, в котором два ответа должны быть связаны с помощью postId, но нужна дополнительная информация из ввода клиента?
или другими словами - как получить доступ к данным из запроса ввода через объединенные службы через преобразователь
Добавлено в ответ на один из вопросов в комментариях
---------------------------- Схема пользователя -------------------- -------
type User @key(fields: "id"){
id: ID!
name: String!
username: String!
userposts: [Post]
email: String!
phone: String!
website: String!
}
// Здесь Id (postId) должен быть первичным ключом, но сервису нужны и другие входные данные, которые содержат MemberInfo и GroupInfo. Я не уверен, как это сделать, и здесь мне нужна помощь, а также по преобразователю
extend type Post @key(fields: "postInput") {
id: ID! @external
postInput : PostInput
}
----------------------------- Схема сообщения ------------------- ------
type PostResult @key(fields: "postInput"){
postInput: PostInput!
userid: Int!
title: String!
comments : [Comments]
}
input PostInput {
postId : String!
memberInfo: MemberInfo
groupInfo: GroupInfo
}
input MemberInfo {
memberNumber: "String"
enrolmentId: "String"
}
input GroupInfo {
groupIds: "String"
groupName: "String"
}