Как отличить вызов распознавателя от федерации и от клиента?

#node.js #graphql #apollo-server #typegraphql #apollo-federation

Вопрос:

Я работаю в проекте GraphQL, используя node typegraphql apollo-server . Моя цель-иметь конкретные показатели для регулярных запросов и отдельно от федераций. Можно ли отличить его от сервера, который запрашивается и разрешает данные?

Под обычным запросом я подразумеваю:

Клиент запрашивает User -gt; Сервер Apollo Gateway -gt;gt; Пользователь Сервер Apollo решает User

И под федеративным я имею в виду:

Клиент запрашивает профиль (который содержит внешний User ) -gt; Сервер Apollo Gateway -gt;gt; Пользователь Сервер 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"  }  

Ответ №1:

В итоге я добавил метрики в reference распознаватель, который настроен в схеме следующим образом:

 import { addResolversToSchema } from 'apollo-graphql';  function resolveUserReference() {  // Resolve User   metrics } const referenceResolvers = {  User: { __resolveReference: resolveUserReference }, };  addResolversToSchema(yourFederatedSchema, referenceResolvers);