我使用Apollo Federation已有2个月了,但实际上被卡住了。我不知道如何在两个graphql服务之间传递变量。
我有一个网站(网站graphql服务),该网站具有订单(订单graphql服务)。我有一个查询来查找网站,对于这些网站,我需要一些日期范围内的订单统计信息。这里是typedef(网站):
type Query {
websites(orderFilter: OrderFilterInput): [Website!]
}
type Website @key(fields: "id") {
id: ID!
name: String!
url: String!
orderSummary(orderFilter: OrderSummaryFilterInput): OrderSummary
}
input OrderSummaryFilterInput {
beginDate: Date
endDate: Date
}
extend type OrderSummary @key(fields: "websiteId") {
websiteId: String! @external
}
解析器:
orderSummary: (website, { orderSummaryFilter }) => {
console.log("orderSummaryFilter", orderSummaryFilter); // filters are OK
// HOW CAN I PASS orderFilterSummary to my order graphql service here ????
return { __typename: "OrderSummary", websiteId: website.id };
}
和订购graphql服务
Typedef部分:
type OrderSummary @key(fields: "websiteId") {
websiteId: String!
count: Int
amount: Int
}
解析器部分:
// order gql service
OrderSummary: {
__resolveReference(website, args, info) {
console.log("website id :", website.id); // I ve got my website ID
// HOW TO GET OrderSummaryFilter here ????
},
},
如何在订单graphql解析器中访问订单摘要过滤器变量?谢谢。
据我所知,不可能将变量从一个服务发送到ID
之后的另一服务。但是有解决方案。
如果要传递变量,请在订单服务中扩展Website
类型,而不要在网站服务中扩展订单类型。
订单类型定义:
extend type Website @key(fields: "id") {
id: ID! @external
orderSummary(orderFilter: OrderSummaryFilterInput): OrderSummary @requires(fields:"id")
}
订单解析器:
Website: {
orderSummary: async (website, { orderFilter }) => getOrderSummary(orderFilter) //get orderSummary with orderFilter
},