Angular - GraphQL - Мутация (большой объект) - PullRequest
0 голосов
/ 07 апреля 2019

В следующем примере у нас есть мутация, которая создает сообщение.Это простой пример только с 2 параметрами, заголовком и URL.Что делать, если в этом посте много аргументов.Есть ли другой способ передать параметры?Или только один за другим.Можем ли мы передать весь объект?

newPost() {
  this.apollo.mutate({
  mutation: gql`mutation($title: String, $url: String) {
    createPost(title: $title, url: $url) {
      title
      url
    }
  }
 `,
 variables: {
   title: this.someForm.get('title'),
   url: this.someForm.get('url')'
 }
}).subscribe(data => {
   console.log('New post created!', data);
});
}

1 Ответ

1 голос
/ 07 апреля 2019

Это то, что специфично для реализации на стороне сервера. Например, схема сервера может выглядеть примерно так:

type Mutation {
  createPost(title: String! url: String!): Post
}

В этом случае, если вы используете переменные, в качестве клиента вы вынуждены использовать одну переменную на аргумент, так как GraphQL не поддерживает какой-то синтаксис типа "распространение". Однако схема может использовать тип входного объекта для группировки нескольких аргументов, например:

type Mutation {
  createPost(input: CreatePostInput!): Post
}

input CreatePostInput {
  title: String!
  url: String!
}

В этом случае вы можете использовать одну переменную, которая является объектом:

mutation($input: CreatePostInput!) {
  createPost(input: $input) {
    title
    url
  }
}

Но, опять же, схема должна поддерживать такого рода использование. Как клиент, вы не можете это контролировать.

...