Я использую apollo-datasource-rest с apollo-server-lambda и пытаюсь понять, как сопоставить запрос с конкретным распознавателем. У меня есть следующая схема, в которой запрос plan должен возвращать список пользователей (который должен управляться запросом 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 возвращает массив user_id, который я хотел бы затем использовать в моем запросе 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, будут использоваться для разрешения их соответствующих типов при возврате из plan преобразователя в Query.
Если распознаватели не определены, GraphQL вернется к распознавателю по умолчанию, который в этом случае выглядит так:
const resolvers = {
Plan: {
title: (parent) => parent.title,
image: (parent) => parent.image,
}
}
Указав настраиваемый преобразователь, вы можете вычислять поля, возвращаемые вашим клиентам, на основе возвращаемого значения родительских преобразователей.
Это отличный ответ. Спасибо.