Федерация Apollo: как получить доступ к данным из запроса ввода через федеративные службы через преобразователь

Ищете возможность присоединиться к ответу API graphQL с использованием федерации Apollo, где API Graphql построены поверх служб POST.

Чтобы объяснить мой вариант использования, я создал ниже фиктивный пример.

Две службы POST

  1. Пользовательское обслуживание и
  2. Почтовая служба

Запрос на 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" 
}
    

0 ответов

Другие вопросы по тегам