I am working in a GraphQL project using node
+ typegraphql
+ apollo-server
.
My goal is to have specific metrics for regular queries, and separately, from federations. Is it possible to differentiate it in the server that is being requested and resolves the data?
By regular query I mean:
Client asks for User
-> Apollo Gateway Server -> User Apollo Server resolves the User
And by a federated one I mean:
Client asks for Profile (which contains external User
) -> Apollo Gateway Server -> User Apollo Server resolves the User
Apparently, this is possible using the DGS framework, @DgsQuery
is for regular resolvers and @DgsEntityFetcher(name = "User")
would work for the federation resolver.
The project related dependencies are:
"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"
}
I ended up adding metrics inside the reference
resolver, which is configured in the schema like the following:
import { addResolversToSchema } from 'apollo-graphql';
function resolveUserReference() {
// Resolve User + metrics
}
const referenceResolvers = {
User: { __resolveReference: resolveUserReference },
};
addResolversToSchema(yourFederatedSchema, referenceResolvers);