graphql - один и тот же запрос с разными аргументами - PullRequest
0 голосов
/ 04 июня 2018

Можно ли достичь нижеследующего с помощью графика ql: у нас есть getusers() / getusers(id=3) / getusers(name='John).Можем ли мы использовать один и тот же запрос для принятия разных параметров (аргументов)?

1 Ответ

0 голосов
/ 28 августа 2018

Полагаю, вы имеете в виду что-то вроде:

type Query {
    getusers: [User]!
    getusers(id: ID!): User
    getusers(name: String!): User
}

ИМХО, лучше всего попробовать.Вы должны получить сообщение о том, что Query.getusers может быть определено только один раз, что ответит на ваш вопрос.

GraphQL - это только логический слой, и если вы учитываете технический аспект, то естьраспознаватель (и), вы можете получить представление о том, почему он ведет себя так.

Резолверы - это простые функции, хранящиеся внутри простых JS-объектов по путям, указанным в имени запроса / мутации / подписки.Очевидно, что в объектах JS не может быть более одного пути с одинаковым именем.Это означает, что вы можете определить только один распознаватель для данного имени запроса, поэтому все три getusers будут отображаться на одну и ту же функцию Query.getusers (obj, args, ctx, info) .

Это означает, что даже если в GraphQL разрешены поля с тем же именем, в резолвере вам все равно придется явно проверять, какие аргументы были переданы, т.е. if (args.id) {...} else if (args.name) {...} и т. д.

В вашем случае одним из способов решения этой проблемы было бы определение типа ввода следующим образом:

input GetUserInput {
    id: ID
    name: String
}

и затем:

type Query {
    getusers(input: GetUserInput)
}

Конечная нота.GraphQL концептуально отличается от REST, поэтому даже не имеет смысла думать о трех конечных точках (/ users, / users /: id и / users /: name), что, как я полагаю, вы делаете.В моем мнении (!) Лучше рассуждать об открытых методах и затем определять свой запрос следующим образом:

type Query {
    users: [User]!
    usersByName(name: String!): [User]!
    user(id: ID!): User
}

РЕДАКТИРОВАТЬ

Вот фактическая спецификация, говорящая, что такая вещь недопустима: http://facebook.github.io/graphql/June2018/#example-5e409

Цитата:

Каждое определение именованной операции должно быть уникальным в документе, если на него ссылается егоимя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...