Использовать ли запрос или мутацию GraphQL для отправки внешних сообщений

Я понимаю, что мутация GraphQL предназначена для запроса, который изменяет состояние сервера. Как насчет запроса, который не меняет никакого состояния сервера, но отправляет сообщение, например электронное письмо, внешнему клиенту или службе. При разработке GraphQL API, что больше подходит для этого типа запроса: запрос или мутация?

На учебном веб-сайте GraphQL приводится следующее объяснение мутаций:

В REST любой запрос может привести к некоторым побочным эффектам на сервере, но по соглашению не рекомендуется использовать запросы GET для изменения данных. GraphQL аналогичен — технически любой запрос может быть реализован для записи данных. Однако полезно установить соглашение о том, что любые операции, вызывающие запись, должны отправляться явно через мутацию.

В Спецификации GraphQL за июнь 2018 года основные операции GraphQL определяются следующим образом:

  • query – выборка только для чтения.
  • мутация — запись с последующей выборкой.
  • подписка — долгоживущий запрос, который извлекает данные в ответ на исходные события.

Поскольку отправка сообщения не изменяет состояние сервера, поначалу казалось уместным использовать запрос. Однако для интерфейсных фреймворков для GraphQL, таких как Vue Apollo, запросы наиболее естественно реализуются как автоматически обновляемые идемпотентные выборки данных только для чтения. Отправка сообщения не является идемпотентной; Я хочу сделать это только один раз.


person Aposhian    schedule 30.03.2020    source источник
comment
Разница в основном академическая, хотя есть несколько практических различий между запросами и мутациями, описанными в связанном посте. Как правило, если мы говорим о действии, которое совершает пользователь или клиент, это должна быть мутация.   -  person Daniel Rearden    schedule 30.03.2020