GraphQL без типа объекта?

Все прочитал, решения и конкретного объяснения не понял (даже здесь: Apollo / GraphQl - тип должен быть типом ввода)

Я хочу создать объектную Систему, содержащую Солнца. Итак, я делаю:

  type System {
   _id: ID
   name: String! @unique
   diameter: Int
   suns: [Sun]
  }

  type Sun {
   _id: ID
   name: String
   diameter: Int
  }

  type Mutation {
   createSystem(name: String!, diameter: Int, suns: [Sun]): System!
  }

И я пишу на детской площадке:

mutation {
  createSystem(name:"new system", suns: [{ name: "John" }]) {
    name
    suns
  }
}

Но я получил терминальную ошибку: «Ошибка: тип Mutation.createSystem (suns :) должен быть типом ввода, но получил: [Sun]».

Я понимаю, что Солнце не воспринимается как объект. Как объявить это как объект?

Большое спасибо за ваши ответы

Возможный дубликат Apollo / GraphQl - тип должен быть типом ввода

Daniel Rearden 17.12.2018 15:39

Спасибо @DanielRearden. Собственно, я уже читал этот пост и ВООБЩЕ не понял, как реализовать тип объекта внутри другого типа объекта ... Спасибо за помощь! :)

Guillaume Duhan 17.12.2018 18:54
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Что такое Apollo Client и зачем он нужен?
Что такое Apollo Client и зачем он нужен?
Apollo Client - это полнофункциональный клиент GraphQL для JavaScript-приложений, который упрощает получение, управление и обновление данных в...
0
2
175
2

Ответы 2

Спецификация GraphQL. не позволяет использовать type (т. е. тип вывода) в качестве входного аргумента. Он позволяет только входным аргументам быть enum, Scalar и Input. Это означает, что вам нужно создать SunInput

input SunInput {
   _id: ID
   name: String
   diameter: Int
}

Большое спасибо за помощь, Кен. Но я все еще не понимаю, как реализовать этот SunInput в моей мутации? createSystem (имя: String !, диаметр: Int, солнце: [SunInput]): System! Не работает!

Guillaume Duhan 17.12.2018 18:53

@AlexandreLafayette, это должно решить проблему, какую ошибку вы получаете?

Amit Bhoyar 23.01.2019 20:25

Вам необходимо создать собственный «Тип» для солнца с его собственным преобразователем.

suns: { type: new GraphQLList(SunType) } // just an example

mutation {
  createSystem(name:"new system", suns-names: "John") {
    name
  }
}

У него будет преобразователь, который записывает новую систему в базу данных, называемую новой системой, которая, например, добавляет солнце «SunType» в коллекцию базы данных с именем «Sun».

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