将变量传递给外部解析引用

问题描述 投票:0回答:1

我使用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解析器中访问订单摘要过滤器变量?谢谢。

apollo apollo-federation
1个回答
0
投票

据我所知,不可能将变量从一个服务发送到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
},
© www.soinside.com 2019 - 2024. All rights reserved.