带有数组参数的嵌套 GraphQL 查询
Nested GraphQL query with array argument
我正在使用 apollo-datasource-rest
和 apollo-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.attending
在 planReducer
returns 中 user_id
s 的数组,我希望它能够输入我的 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 给您的客户。
我正在使用 apollo-datasource-rest
和 apollo-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.attending
在 planReducer
returns 中 user_id
s 的数组,我希望它能够输入我的 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 给您的客户。