如何区分来自联邦和客户端的解析器调用?
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);
我正在使用 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);