Как решить конфликт имен в 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 });

Приведенный выше пример работает хорошо, но я хочу использовать имя мутации increase_length вместо increase_fish_length и increase_rope_length.

Я попытался назвать мутации Fish/increase_length и Rope/increase_length с помощью косой черты, но это не сработало. (доступны только /[_A-Za-z][_0-9A-Za-z]*/.)

Dose GraphQl поддерживает любое решение для пространства имен?


person left click    schedule 18.08.2018    source источник


Ответы (2)


Graphql не поддерживает что-то вроде пространства имен

person yussenn    schedule 18.08.2018

Я играл с некоторыми идеями, касающимися пространств имен. Что, если бы ваши typeDefinitions выглядели примерно так:

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;
        }
    }
};

Самым большим недостатком является шаткий преобразователь мутаций, который возвращает пустой массив. Однако он должен существовать так, чтобы он каскадировался на другие мутации.

person Dan Crews    schedule 21.08.2018
comment
Да~! Раньше я применял эту идею к Query. Я должен рассмотреть это. Спасибо, что поделились своей идеей! - person left click; 24.08.2018