У меня возникают проблемы с работой мутации в GraphQL, когда тип в схеме включает вложенный тип. Скажем, у меня есть тип данных для бронирования:
const BookingType = new GraphQLObjectType({
name: 'Booking',
fields: () => ({
id: { type: GraphQLInt },
Date: { type: GraphQLString },
Venue: { type: GraphQLString }
})
});
В файле схемы у меня также есть корневая мутация, которая выглядит так:
createBooking: {
type: BookingType,
args: {
Date: { type: new GraphQLNonNull(GraphQLString) },
Venue: { type: new GraphQLNonNull(GraphQLString) }
},
resolve(parentValue, args){
return axios.post('http://localhost:3000/booking', args)
.then(resp => resp.data);
}
}
Я могу написать мутацию в GraphiQL, чтобы без проблем создавать данные для бронирования:
mutation {
createBooking(
Date: "2018-03-12",
Venue: "Some place",
) {
id
Date
Venue
}
}
Все идет нормально. Теперь мне нужно добавить вложенный тип к исходному объекту бронирования для записи сотрудников, назначенных для бронирования. Поэтому я добавил типы для сотрудника (как входные, так и выходные типы) и добавил их к типу бронирования и мутации:
// output type
const AssignedStaffType = new GraphQLObjectType({
name: 'AssignedStaff',
fields: () => ({
id: { type: GraphQLInt },
Name: { type: GraphQLString }
})
});
// input type
const AssignedStaffInputType = new GraphQLInputObjectType({
name: 'AssignedStaffInput',
fields: () => ({
id: { type: GraphQLInt },
Name: { type: GraphQLString }
})
});
Тип бронирования становится:
const BookingType = new GraphQLObjectType({
name: 'Booking',
fields: () => ({
id: { type: GraphQLInt },
Date: { type: GraphQLString },
Venue: { type: GraphQLString },
Staff: { type: new GraphQLList(AssignedStaffType) }
})
});
И корневая мутация становится:
createBooking: {
type: BookingType,
args: {
Date: { type: new GraphQLNonNull(GraphQLString) },
Venue: { type: new GraphQLNonNull(GraphQLString) },
Staff: { type: new GraphQLList(AssignedStaffInputType) }
},
resolve(parentValue, args){
return axios.post('http://localhost:3000/booking', args)
.then(resp => resp.data);
}
}
Я не знаю, как теперь сформулировать мутацию в GraphiQL, в частности, что использовать в качестве значения для Staff:
mutation {
createBooking(
Date: "2018-03-14",
Venue: "Some place",
Staff: // ??? <--- What goes here??
) {
id
Venue
Date
Staff
}
}
Я попытался предоставить ему объект или массив объектов, которые имеют ту же структуру, что и AssignedStaffInputType, но я просто получаю сообщение об ошибке («ожидание AssignedStaffInputType»). Клиент (в данном случае GraphiQL) ничего не знает о AssignedStaffInputType, как определено в схеме, поэтому я не понимаю а) как использовать этот тип ввода в клиенте, или б) как я затем заполняю такой введите требуемые данные.
Помогите, пожалуйста!