Как решить конфликт имен в GraphQL?
import { makeExecutableSchema } from 'graphql-tools';
const fish = { length:50 },
rope = { length:100 };
const typeDefs = `
type Query {
rope: Rope!
fish: Fish!
}
type Mutation {
increase_fish_length: Fish!
increase_rope_length: Rope!
}
type Rope {
length: Int!
}
type Fish {
length: Int!
}
`;
const resolvers = {
Mutation: {
increase_fish_length: (root, args, context) => {
fish.length++;
return fish;
},
increase_rope_length: (root, args, context) => {
rope.length++;
return rope;
}
}
};
export const schema = makeExecutableSchema({ typeDefs, resolvers });
Вышеприведенный пример работает хорошо, но я хочу использовать имя мутации увеличения_длину вместо увеличения_фиг_длины и увеличения_процедуры.
Я попытался назвать мутации Fish/increment_length и Rope/ Increase_length, используя косую черту, но это не сработало. (доступны только /[_A-Za-z][_0-9A-Za-z]*/.)
Dose GraphQl поддерживает какое-либо решение для пространства имен?
2 ответа
Решение
Я возился с некоторыми идеями о пространствах имен. Что если ваши определения типов выглядят примерно так:
type Mutation {
increase_length: IncreaseLengthMutation!
}
type IncreaseLengthMutation {
fish: Fish!
rope: Rope!
}
и ваши резольверы выглядели так:
const resolvers = {
Mutation: {
increase_Length: () => {
return {}
}
},
IncreaseLengthMutation {
fish: (root, args, context) => {
fish.length++;
return fish;
},
rope: (root, args, context) => {
rope.length++;
return rope;
}
}
};
Самым большим недостатком является расшифровщик мутаций, который возвращает пустой массив. Оно должно существовать так, чтобы оно каскадно касалось других мутаций.