根据GraphQL Param更改后端服务

时间:2019-11-04 09:02:14

标签: graphql apollo apollo-server

我有一个GraphQL模式:

-DBUILD_WITH_THIS_OPTINAL_FEATURE=ON

如何编写解析器,以便根据BigParent (parentParam: Boolean) { id name Parent { id name Child (childParam: Boolean) { id name } } } parentParam还是truechildParam来调用不同的后端API?第一种选择是直接的。第二种需要根据true级别返回的服务数据返回的值来重构Graph。

我不会将这两个选项都视为真实,因为我会分配一些优先级,以便在传递父级参数时不考虑子级参数。

1 个答案:

答案 0 :(得分:0)

可以通过遍历GraphQL解析器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();
    },
  },
};