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