conf-talks icon indicating copy to clipboard operation
conf-talks copied to clipboard

Mutation chaining

Open Donnyyyyy opened this issue 6 years ago • 3 comments

Можно попробовать

В 6.1. объединять мутации не просто в namespace-типы, которые возвращают {} (что приводит к тому, что корень - пустой объект), а делегировать логику по "поиску" объекта, над которым будет произведена мутация, этому самому namespace-типу?

То есть:

mutation {
  post(id: 4) {
    like { ... }
  }
}

И, например, если поста с id 4 не существует, то просто возвращаем null на post и на этом мутация завершится, избавив нас от потенциальных багов.

А что, если...

Возвращать тот самый namespace тип в качестве поля результата мутации? Мы получим чейнинг :)

mutation {
  post {
    create(...) {
      ...
      post { // Здесь мы имеем дело с только что созданным постом
        like { ... }
      }
    }
  }
}

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

Donnyyyyy avatar Feb 12 '19 17:02 Donnyyyyy

Надо переспать с твоим предложением. На первый взгляд звучит очень круто! 👍

nodkz avatar Feb 12 '19 19:02 nodkz

Я долго спал )))

Добрался до обновления правил, в виду подготовки к выступленияю с правилами v2 на РИТ++.

В итоге, с первой частью твоего предложения я не согласен. Так бывает ;) Точнее их применить можно, но они больше запутают и принесут проблем в будущем.

1) Можно попробовать

mutation {
  post(id: 4) {
    like { ... }
  }
}

При таком варианте

  • сложнее писать резолверы для мутаций
  • мутация не может вернуть типизированную ошибку или статус (null обычно немногословен)
  • при ститчинге схем не будет работать

2) А что, если...

Возвращать тот самый namespace тип в качестве поля результата мутации? Мы получим чейнинг :) ввиду "забраковывания" первой части, это предложение уже выглядит не так шикарно. Но все еще здорово иметь чейнинг. Вобщем пока не ясно как с этим быть – пока не могу сформулировать хорошее правило и его рекомендовать. Так что пусть еще лежит ;)

nodkz avatar May 17 '19 19:05 nodkz

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

При их использовании ломается правило "Один запрос - одна мутация" и во всех случаях , когда это правило хочется обойти, стоит просто сделать общую мутацию, так проще.

В общем если и есть кейс, в котором эта "фича" может быть полезна, то его еще предстоит открыть :)

Donnyyyyy avatar Jul 25 '19 16:07 Donnyyyyy