1

我们正在尝试使用Apollo federation实现Relay 节点查询。由于 Apollo 不知道 Relay,我们必须在一些服务(Node Resolution Service)中实现节点查询

interface Node {
  id: ID!
}

type Query {
  node(id: ID!): Node!
}

问题是节点解析服务不知道其他服务子图中定义的任何实现类型。

Apollo 网关向节点解析服务发送如下请求

{node(id:"dHlwZUZyb21BU2VydmljZTox"){__typename ...on TypeFromAnotherService{id __typename}}}

查询验证失败,因为服务不知道任何关于TypeFromAnotherService. 我们能够实现节点查询,因为我们在 ID 中编码了类型,但我们不知道如何修复验证。

  1. 我们可以根据联合模式动态生成模式。这个好像用在这里但是感觉很麻烦
  2. 关闭验证并信任 Apollo GW 验证。我们不喜欢它,而且似乎在我们在后端使用的Netflix DGS中是不可能的。

任何想法如何使中继节点查询与联邦一起工作?

4

1 回答 1

0

We solved it by implementing a standalone Node Resolver. It does the following:

  1. Inspects the query and generates the schema on-the-fly in case Apollo uses a type in a fragment. Node resolver basically adds TypeFromAnotherService to the schema.
  2. Node resolver extracts Type from the ID and generates the response.

We are thinking about open-sourcing the service, would anybody be interested?

于 2021-11-16T09:45:38.993 回答