Рубрики
Без рубрики

Понимание мутаций GraphQL

Изменение данных с мутациями GraphQL. Теги с GraphQL, JavaScript, WebDev.

Эта статья была первоначально опубликована на moonhighway.com .

Вы не можете записать график без QL: язык запроса. Но не позволяйте термину запрос Предложите, что GraphQL только о получении данных. Graphqcl – это больше, чем это.

Чтобы изменить данные с graphql, мы можем отправить мутацию. Подумайте о мутации GraphQL в качестве функции, которая может выполнять пользовательские операции создания, обновления и/или удаления с помощью небольшого дополнительного ущелья и гибкости.

В этой статье мы приблизим посмотрим на мутации GraphQL: как разработать их в схеме и как выполнить их, используя язык запроса GraphQL.

Мутации должны представлять глаголы В вашем приложении. Они должны состоять из того, что пользователи должны быть в состоянии выполнить с вашим сервером. При разработке API GraphQL сделайте список всех действий, которые пользователь может взять с собой приложение. Это, скорее всего, ваши мутации.

Мутация это тип корневого объекта, как Запрос Отказ Мутации имеют имена. У них может быть наборы выбора, которые возвращают типы объектов или скаляры. Мы определяем все мутации, доступные на нашем API GraphQL в Мутация Тип в схеме:

type Mutation {
  # mutations go here
}

В пределах Мутация Введите в схеме, мы даем мутацию по имени и определите, что нужно возвращать из мутации:

type Mutation {
  deleteAllSongs: Boolean!
}

deletealsongs это название мутации. Это вернет логию, чтобы описать, была ли мутация успешной или нет. Глагол, который мы хотим сделать, это удалить все песни в наборе данных. Эта мутация плохие новости.

Чтобы запустить эту мутацию, мы отправим следующую мутацию, используя язык запроса GraphQL:

mutation Chaos {
  deleteAllSongs
}

И мы должны получить следующий ответ:

{
  "data": {
    "deleteAllSongs": true
  }
}

С этой мутацией все наши песни ушли. Хотя мы можем не очень великолепно о факелировании всех наших данных, мы должны найти утешение в том, что теперь мы знаем, как отправить мутацию на API GraphQL, мутацию, которая возвращает логическое значение.

Отправка аргументов мутации

Давайте рассмотрим другую мутацию, но вместо того, чтобы уничтожить что-то, давайте что-то создадим. Начнем с схемы:

type Mutation {
  addSong(
    title: String! 
    numberOne: Boolean
    performerName: String!
  ): Song!
}

Имя мутации – Addsong и принимает три аргумента: ненужная строка для Название , нулевое логическое значение для того, была ли песня Номер Comeone Хит и ненужная строка для Имея . Мы можем предположить, что мутация добавляет эту новую песню в базу данных. Обратите внимание, что мы возвращаем Песня Тип из этой мутации. Песня определяется в схеме следующим образом:

type Song {
  id: ID!
  title: String!
  numberOne: Boolean
  performerName: String!
}

Это означает, что когда мы отправляем мутацию, Песня Объект будет возвращен, давая нам доступ ко всем полям на Песня Отказ

mutation CreateSong {
  addSong(
    title: "Electric Avenue"
    numberOne: false
    performerName: "Eddy Grant"
  ) {
    title
    numberOne
    performerName
  }
}

Приведенное выше можно использовать для создания новых песен. Потому что эта мутация возвращается Песня И оно ненужно, нам нужно добавить выбор набора после мутации. Другими словами, список аргументов сопровождается набором фигурных скобок вокруг другого списка полей. Здесь мы выбираем заглавие и номер один Поля для песни, которая была только что создана.

{
  "data": {
    "title": "Electric Avenue",
    "numberOne": false,
    "performerName": "Eddy Grant"
  }
}

Отправка аргументов в качестве переменных

До сих пор мы отправили аргументы мутации, встроенные непосредственно с помощью текста запроса. Это может быть сложно собирать данные из ваших приложений таким образом. В качестве альтернативы вы можете использовать входные переменные. Переменные замените статическое значение в запросе, чтобы мы могли пройти вместо этого динамические значения.

Давайте рассмотрим нашу мутацию Addsong. Вместо того, чтобы иметь дело с строками, мы будем использовать имена переменной, которые в Graphql всегда предшествуют $ персонаж:

mutation createSong($title: String!, $numberOne: Boolean, $by: String!) {
  addSong(title: $title, numberOne: $numberOne, performerName: $by) {
    title
    numberOne
    performerName
  }
}

Статическое значение заменяется на $ переменная Отказ Затем мы заявляем, что $ переменная может быть принято мутацией. Оттуда мы рассмотрим каждый из $ переменная имена с именем аргумента. В детской площадке Graphiql или Graphql есть окно для переменных запросов в левом нижнем углу. Здесь мы отправляем входные данные в качестве объекта JSON. Обязательно используйте правильное имя переменной как клавишу JSON:

{
  "title": "No Scrubs",
  "numberOne": true,
  "by": "TLC"
}

Переменные очень полезны при отправке данных аргумента. Это не только будет держать наши мутации более организованными в тесте игровой площадки GraphQL, но позволяя динамические входы будут чрезвычайно полезными позже при подключении клиентского интерфейса.

Возвращая пользовательские предметы из мутации

До сих пор мы вернули Логический и а Песня объект из мутации. Могут быть случаи, когда вы хотите получить доступ к большему количеству полей в результате мутации. Возможно, метка времени? Или некоторые данные о том, была ли мутация успешной? Вы можете построить пользовательский тип объекта ответа, который может доставить эти поля. Начнем с возврата Addsongresponse Объект в схеме:

type Mutation {
  addSong(
    title: String!
    numberOne: Boolean
    performerName: String!
  ): AddSongResponse!
}

Тогда мы создадим Addsongresponse объект:

type AddSongResponse {
  song: Song!
  success: Boolean!
  timestamp: String!
}

Создавая этот тип, мы можем инкапсулировать песню и несколько полей метаданных о выполнении мутации и возвращать их из мутации. Запрос немного изменяется с этим улучшением:

mutation createSong($title: String!, $numberOne: Boolean, $by: String!) {
  addSong(title: $title, numberOne: $numberOne, performerName: $by) {
    song {
      title
      numberOne
    }
    success
    timestamp
  }
}

Песня Объектные поля теперь вложены под песня поле. песня , Успех и Timestamp сейчас на том же уровне. Создание этих пользовательских возвратных объектов может позволить большему пониманию мутации, чем просто возвращение прощественного типа объекта.

Мутации начинаются с схемы, а планирование, какие мутации являются важным процессом. Помните, что эти мутации являются гибкими и могут вернуть что-нибудь: скалярные значения, такие как логические значения или строки, типы основных, как Песня или пользовательские объекты реагирования мутации.

Для получения дополнительной информации о том, как настроить сервер GraphQL, который поддерживает мутации, проверьте наш плейлист на EGGHEAD.IO: Создавайте Ploystack Applications с GraphQL и APOLLO Отказ

Оригинал: “https://dev.to/eveporcello/understanding-graphql-mutations-52nl”