带有数组参数的嵌套 GraphQL 查询

Nested GraphQL query with array argument

我正在使用 apollo-datasource-restapollo-server-lambda 并试图弄清楚如何将查询映射到特定的解析器。我有以下架构,其中 plan 查询应该 return 用户列表(应该由 users 查询而不是 user 查询驱动) .

  type Query {
    user(user_id: String, username: String): User
    users(user_ids: [String!]): [User!]
    plan(plan_id: String): Plan
  }

  type User {
    id: String
    username: String
    first: String
    last: String
    image: String
  }

  type Plan {
    title: String
    image: String
    attending: [User]
  }

plan查询解析器数据源如下:

planReducer(data) {
  return {
    image: data.public.info.image,
    title: data.public.info.title,
    attending: Object.keys(data.public.attending)
  }
}

data.public.attendingplanReducer returns 中 user_ids 的数组,我希望它能够输入我的 users 查询与我的 user 查询相反。

这些是我当前的解析器:

user: (_, { username }, { dataSources }) =>
  dataSources.userData.getUserByUsername({ username: username }),
users: async (_, { user_ids }, { dataSources }) => {
  const usersArray = await dataSources.userData.getUsersByIds({ userIds: user_ids })
  return usersArray
},
plan: async (_, { plan_id }, { dataSources }) => {
  return dataSources.planData.getPlanById({ planId: plan_id })
}

您的解析器映射应如下所示:

const resolvers = {
  Query: {
    plan: async (_parent, { plan_id: planId }, { dataSources }) => (
      dataSources.planData.getPlanById({ planId })
    )
  },
  Plan: {
    users: async ({ user_ids: userIds }, _variables, { dataSources }) => (
      dataSources.userData.getUsersByIds({ userIds })
    )
  }
}

Query 中的每个键都应该是一个解析器,对应于在架构的根 Query 中定义的查询。作为根的直接子项的键,在本例中为 Plan,当 return 从 Query 中的 plan 解析器编辑时,将用于解析它们的相应类型。

如果未定义解析器,GraphQL 将回退到默认解析器,在这种情况下如下所示:

const resolvers = {
  Plan: {
    title: (parent) => parent.title,
    image: (parent) => parent.image,
  }
}

通过指定自定义解析器,您可以根据父解析器的 return 值计算字段 return 给您的客户。