Изменить бэкэнд-сервис на основе GraphQL Param - PullRequest
1 голос
/ 04 ноября 2019

У меня есть схема GraphQL как таковая:

BigParent (parentParam: Boolean) {
  id
  name
  Parent {
    id
    name
    Child (childParam: Boolean) {
      id
      name
    }
  }
}

Как я могу написать преобразователи так, чтобы я вызывал разные API бэкэнда, основываясь на том, является ли parentParam true или childParam true? Первый вариант прост. Во-вторых, необходимо как-то реконструировать график на основе значений, возвращаемых служебными данными, возвращенными на уровне Child.

. Я не рассматриваю оба варианта как истинные, так как назначунекоторый приоритет, чтобы параметр на дочернем уровне не учитывался при передаче параметра на родительском уровне.

1 Ответ

0 голосов
/ 06 ноября 2019

Вы можете получить аргументы для любого выбора поля в запросе, пройдя параметр GraphQL resolver info.

Предполагая, что ваш запрос выглядит следующим образом:

query {
  BigParent(parentParam: Boolean) {
    id
    name
    Parent {
      id
      name
      Child(childParam: Boolean) {
        id
        name
      }
    }
  }
}

Вы должны бытьв состоянии сделать что-то вроде этого:

function getChildParam(info) {
  // TODO: Return 'childParam'
}

const resolvers = {
  Query: {
    async BigParent(parent, args, context, info) {
      // 'args' contains the 'parentParam' argument
      const parentParam = args.parentParam;

      // Extract the 'childParam' argument from the info object
      const childParam = getChildParam(info);

      if (parentParam || childParam) {
        return context.datasource1.getData();
      }

      return context.datasource2.getData();
    },
  },
};
...