如何区分来自联邦和客户端的解析器调用?

How to differentiate between a resolver call from federation and from client?

我正在使用 node + typegraphql + apollo-server 在 GraphQL 项目中工作。 我的目标是为常规查询提供特定的指标,并且独立于联合。能不能在请求的服务器中区分出来解析数据?

常规查询是指:

客户端请求 User -> Apollo 网关服务器 -> 用户 Apollo 服务器解析 User

联合的意思是:

客户端请求配置文件(其中包含外部 User)-> Apollo 网关服务器 -> 用户 Apollo 服务器解析 User

显然,这可以使用 DGS 框架实现,@DgsQuery 适用于常规解析器,@DgsEntityFetcher(name = "User") 适用于联合解析器。

项目相关依赖为:

"dependencies": {
    "@apollo/federation": "^0.30.0",
    "apollo-datasource-rest": "^3.1.1",
    "apollo-graphql": "^0.9.3",
    "apollo-server": "^3.1.2",
    "apollo-server-express": "^3.1.2",
    "graphql": "^15.5.1",
    "graphql-tag": "^2.12.5",
    "graphql-tools": "^8.1.0",
    "type-graphql": "^1.1.1"
  }

我最终在 reference 解析器中添加了指标,它在架构中配置如下:

import { addResolversToSchema } from 'apollo-graphql';

function resolveUserReference() {
  // Resolve User + metrics
}
const referenceResolvers = {
  User: { __resolveReference: resolveUserReference },
};

addResolversToSchema(yourFederatedSchema, referenceResolvers);