Эта статья была первоначально опубликована на 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”