寻找使用 Apollo federation 加入 graphQL API 响应的选项,其中 Graphql API 构建在 POST 服务之上。
为了解释我的用例,我创建了下面的虚拟示例。
两个 POST 服务是
- 用户服务和
- 邮政服务
请求用户服务
{
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"
}