0

寻找使用 Apollo federation 加入 graphQL API 响应的选项,其中 Graphql API 构建在 POST 服务之上。

为了解释我的用例,我创建了下面的虚拟示例。

两个 POST 服务是

  1. 用户服务和
  2. 邮政服务

请求用户服务

{
userid : "13242"
}

来自用户服务的响应

    {
       userName,
       email,
       dateOfBirth,
       postIds []
    }

要求邮政服务

  {
    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"
    }
  }

Post Service 需要来自 UserService Response 的 PostIds 以及来自 Gateway Input(来自客户端的输入)的 memberInfo 和 GroupInfo。

在我当前的解析器中,除了 postId,我没有任何信息,

{
  user: {
    posts(user) {
      return user.posts.map(postId => ({ __typename: "Post", postId }));
    }
  }
}

如何编写解析器,其中两个响应需要使用 postId 连接但需要来自客户端输入的额外信息?

或者换句话说 - 如何通过解析器跨联合服务访问来自 Input Request 的数据


添加以回答评论中的问题之一

---------------------------------------- 用户架构 -------------------- --------

 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" 
}
    
4

0 回答 0