Оптимизация. Ветвление c помощью Switch

В этой главе я покажу несколько подходов к оптимизации сценариев в n8n, которые помогут сделать их более гибкими и масштабируемыми.

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


В предыдущей главе мы создали простой калькулятор, который выполняет базовые арифметические операции.

Каждая операция обслуживается отдельным узлом со своим путем выполнения. Например, так:

POST /webhook/calсulator/addition
POST /webhook/calсulator/subtraction
POST /webhook/calсulator/multiplication
POST /webhook/calсulator/division

Тело запроса одинаково для всех операций:

{
  "operand1": 8,
  "operand2": 3
}

Схема работы вполне понятна: клиент отправляет запрос на нужный путь, и сервер выполняет соответствующую операцию.

Если нужно добавить новую операцию, например, возведение в степень, мы просто создаем новый узел:

POST /webhook/calсulator/power

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

Один узел для всех операций калькулятора

Мы можем объединить все операции в один узел, который будет принимать параметр operation для определения нужной операции.

Один узел, один адрес.

POST /webhook/calсulator
{
  "operation": "addition",
  "operand1": 8,
  "operand2": 3
}

Вариант 1: Узел Switch

В зависимости от значения operation мы можем использовать узел Switch, который направляет запрос на нужный узел для выполнения операции.

Узел Switch создает множество веток. Внутри него происходят проверки условий. Если происходит совпадение с одним из условий, то ход движения сценария переходит на эту ветку.

Покажу как будет выглядеть сценарий, а потом объясню, как это сделать.

img1.png

Я оставил только один веб-хук триггер, который принимает запросы на /webhook/calсulator, остальные удалил.

Чтобы удалить связку узлов, нужно навести на стрелку связи и нажать иконку корзины.

Перевяжите узлы как показано на картинке.

В настройках узла Switch добавьте условия для каждой операции:

img2.png

Настройки полей:

img3.png

Как вы видите в узле Switch я добавил 4 условия для каждой операции калькулятора.

Каждое правило проверяет значение поля ``, которое указывает на входящие данных в узел Switch. Проверяет на равенство строке addition, subtraction, multiplication и division.

В этой ситуации мы проверяем на равенство строке, но можно проверять и на другие условия, например, не равно, больше или меньше, содержит и т.д.

img4.png

Чтобы быстро получить указатель на поле, можно его перетащить из панели слева в поле условия.

img5.png

Обратите внимание, что я включил опцию у каждого правила Rename Output. Это нужно чтобы ветки, которые будут выходить из узла Switch, имели понятные названия.

img6.png

Перейдите в узел Switch и нажмите на кнопку Execute Node.

img7.png

Вы увидите табы и в какую ветку передались данные. В данном случае произошла проверка условия operation = addition, и данные передались в ветку Addition.


Выводы

Узел Switch позволяет создавать ветвления в сценарии на основе условий.

Это удобно, когда нужно обрабатывать разные варианты входящих данных и выполнять разные действия в зависимости от них.

В нашем случае мы благодаря узлу Switch избавились от дублирования узлов триггеров.

Является ли это оптимизацией? Да, но у нас практически полностью дублируются узлы операций калькулятора и ответ на запросы.