У меня есть очень простая мутация graphql во внешнем интерфейсе, которую я отправляю в свой бэкэнд. Я использую этот код на graphql-request
в качестве руководства.
С примитивами это работает:
const mutation = gql`
mutation EditArticle($id: ID!, $title: String) {
editArticle(id: $id, title: $title) {
id
}
}
`
Теперь я также хотел бы иметь возможность изменять некоторые метаданные о статье, хранящиеся в объекте meta
внутри статьи:
...,
title: "Hello World",
meta: {
author: "John",
age: 32,
...
}
Итак, мой вопрос: Как мне передать непримитивные типы объектов в качестве аргументов для мутаций при выполнении запроса из внешнего интерфейса, используя graphql-запрос?
Я уже пробовал что-то вроде этого:
const Meta = new GraphQLObjectType({
name: "Meta",
fields: () => ({
id: { type: GraphQLID },
name: { type: GraphQLString },
age ....
}),
})
const mutation = gql`
mutation EditArticle($id: ID!, $title: String, $meta: Meta) { //??? I don't seem to get what goes here?
editArticle(id: $id, title: $title, meta: $meta) {
id
}
}
`
Я также пробовал это с GraphQLObjectType
, но я думаю, что здесь я ошибаюсь (так как это интерфейс).
PS: я просмотрел этот ответ, но я не понял/не поверил решение там может быть неполным.
editArticle
. Скорее всего, это должно быть что-то вродеMetaInput
. Это должен быть типinput
, а не выходной. - person Bergi   schedule 20.12.2020MetaInput
и нет необходимости определять это снова на клиенте, как я теперь понимаю? - person R. Kohlisch   schedule 20.12.2020express-graphql
, хотя, конечно, серверная сторона зависит от реализации (и вам не обязательно создаватьnew GraphQLInputObjectType
самостоятельно - вы можете просто проанализировать определение схемы или что-то в этом роде). Но во внешнем интерфейсе, где вы определяете запрос, вы просто обращаетесь к нему по имени, вам не нужно делать ничего дополнительно. - person Bergi   schedule 20.12.2020