如何在网关层使用 Federated GraphQL 中的自定义指令聚合字段?

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

我对我的图表有横切关注,我需要在网关层而不是子图上聚合字段。我必须使用自定义指令

@aggregateme
标记所有子图中感兴趣的字段,以便我的同事能够轻松参与我的行为。
@tag(name: "aggregateme")
同样可以接受。当我的 Apollo 服务器/网关使用
@aggregateme
指令解析每个字段时,,在
willSendResponse
上,我需要收集该字段中所有字段的
path.to.the.field
value
回应。

然而,问题

  1. 虽然
    buildSubgraphSchema
    在我的子图中显示了我的自定义指令,但我使用
    ApolloGateway({ supergraphSdl: ...subgraphDatas })
    组成的联合模式会删除这些指令。
    @tag
    据称包含在超级图模式中,但是,在检查内存中的
    GraphQL
    模式实例时,我仍然无法在超级图模式中看到该指令。我还看到了 composeDirective,但怀疑这只存在于 graphos 中,而不是 javascript 网关中。
  2. executionDidStart
    /
    willResolveField
    似乎没有在网关中运行。

您建议如何在 ApolloGateway 中应用基于自定义指令的集中式聚合?

我正在使用所有最新的东西:

"@apollo/gateway": "2.9.3",
"@apollo/server": "4.11.2",
"@apollo/subgraph": "^2.9.3",
"@graphql-tools/schema": "10.0.11",
"@graphql-tools/utils": "10.6.2",
graphql apollo graphql-js apollo-federation
1个回答
0
投票

解决办法如下:

  1. 使用 graphql-tools lib 访问
    mapSchema
    函数
  2. 使用mapSchema,创建一个新的模式实例,并将自定义字段解析器附加到感兴趣的字段。显然模式可以自我托管
    field.resolver
    意味着!
  3. 使用这个新架构和联合响应值运行
    graphql#execute
  4. 使用新累积的价值
© www.soinside.com 2019 - 2024. All rights reserved.