Иногда вам нужно, чтобы ваш API выполнял действие, не связанное с получением данных или манипулированием ими. Например, отправка электронного письма «Забыли пароль» или взаимодействие со сторонним API.
Есть ли у Apollo (или самого GraphQL) рекомендуемый способ сделать это?
Если нет, то какие решения существуют для достижения этой цели, при этом используя преимущества Apollo (такие как проверка схемы/типа)?


Различие между запросами и мутациями — в основном академический. В то время как спецификация определяет мутацию как «запись, за которой следует выборка», вы можете думать о запросах как о идемпотентный и без побочных эффектов, в то время как мутации — это что-то, чего нет. В этом смысле запрос на сброс пароля может ничего не изменить в вашей базе данных, но он, безусловно, не свободен от побочных эффектов и, следовательно, должен быть мутацией.
Как правило, все, что можно описать как действие («создать», «обновить», «сбросить», «отправить» и т. д.), вероятно, должно быть мутацией. Это также влияет на использование клиента, поскольку многие клиенты (например, Apollo) ожидают, что мутации будут использоваться иначе, чем запросы на стороне клиента.