Это хорошая практика для объединения нескольких мутаций GQL в один вызов HTTP - PullRequest
0 голосов
/ 29 января 2020

У меня есть мутация на моем GQL-сервере. Решающий элемент для этого, в основном, просто передает запрос в бэкэнд-сервис Java, который обрабатывает отображение таблицы Dynamo. Я не могу ничего сейчас редактировать на этом сервисе.

Подпись мутации выглядит следующим образом:

mutation {
  addItemRelation(child:"child1Id", parent:"parentId"),
}

mutation {
  removeItemRelation(child:"child1Id", parent:"parentId"),
}

На внешнем интерфейсе у меня есть интерфейс, который позволяет мне устанавливать флажки, чтобы связать определенные свойства с родительским элементом. В настоящее время я справляюсь с этим, вычисляя элементы для добавления / удаления. Затем отправим один HTTP-вызов в GQL для каждого элемента.

Мне интересно, было бы лучше объединить все это в один запрос. Например, если бы я добавил 2 элемента и удалил один, я мог бы вычислить запрос GQL следующим образом.

mutation {
  addItemRelation(child:"child1Id", parent:"parentId"),
  addItemRelation(child:"child2Id", parent:"parentId"),
  removeItemRelation(child: "child3id", parent: "parentId")
}

Будет ли это считаться более эффективной практикой, чем отправка 3 отдельных запросов http?

1 Ответ

1 голос
/ 29 января 2020

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

С другой стороны, мутации уровня root выполняются последовательно (по сравнению со всеми другими полями, которые фактически выполняются в параллельно). Такой вид последовательного выполнения может быть желательным сам по себе, в зависимости от вашего бизнеса. Однако технически это также означает , если ваш сервер способен обрабатывать несколько запросов параллельно, отправка каждого поля в виде отдельного запроса может привести к более быстрому завершению всех трех мутаций. На практике задержка между клиентом и сервером, как правило, является самым большим фактором, поэтому разница может быть незаметной.

Помните, что когда ваш набор выбора включает одно и то же поле несколько раз, вам нужно будет использовать псевдонимы :

mutation {
  addItemRelation(child:"child1Id", parent:"parentId"),
  addItemRelation2: addItemRelation(child:"child2Id", parent:"parentId"),
  removeItemRelation(child: "child3id", parent: "parentId")
}
...