Как работать с вложенным вводом в GraphQL

При написании запросов я могу определить преобразователь для любого поля, и значение этого поля будет определяться его преобразователем, независимо от глубины запроса.

Однако при написании мутации я, кажется, могу определить преобразователи только на корневом уровне. Добавление метода разрешения к полям в моих аргументах или типе ввода, похоже, не влияет.

Как лучше всего справляться с вложенным вводом при мутациях?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Что такое Apollo Client и зачем он нужен?
Что такое Apollo Client и зачем он нужен?
Apollo Client - это полнофункциональный клиент GraphQL для JavaScript-приложений, который упрощает получение, управление и обновление данных в...
7
0
8 483
1

Ответы 1

Что вы подразумеваете под вложенным вводом в ваших мутациях? Типы ввода GraphQL не имеют преобразователей. С резольверами вы просто определяете, как получить результаты. Если вы хотите иметь вложенный ввод, например например, я хотел бы создать пользователя также с компанией. Затем я определю тип CreateUserInputCreateCompanyInput, например, в SDL

input CreateCompanyInput {
   name: String!
   type: CompanyEnum!
}

input CreateUserInput { 
  username: String!
  firstname: String!
  lastname: String!
  company: CreateCompanyInput!
}

type Mutation {
  createUser(input: CreateUserInput!): User
}

Таким образом, я в основном вкладываю аргументы и могу реализовать более сложные мутации. Вдобавок я могу повторно использовать CreateCompanyInput для мутации createCompany, если мне нужна мутация даже для этого. Тогда у меня будет весь CreateUserInput даже с CreateCompanyInput в преобразователе createUser в качестве входного аргумента. Я могу применять транзакции, поскольку создам две новые записи и т. д. Не уверен, что вы имеете в виду вложенный ввод, если вы имеете в виду что-то еще. Просто дай мне знать :)

Какой фронт вы используете для этого? Как выглядит запрос внешнего интерфейса?

user3113645 04.02.2019 23:29

Это пример мутации для создания пользователя. Запрос GraphQL может выглядеть, например, следующим образом: `createUserMutation ($ input: CreateUserInput!) {CreateUser (input: $ input) {id, firstname, lastname}}`. Для этого кода вам также необходимо передать соответствующие переменные.

David Mraz 05.02.2019 00:01

как бы выглядел файл .graphql с mutation CreateUser { createUser(input: { ... }) }?

xenoterracide 11.11.2020 14:51

Другие вопросы по теме