Оптимизация. Ветвление 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 создает множество веток. Внутри него происходят проверки условий. Если происходит совпадение с одним из условий, то ход движения сценария переходит на эту ветку.
Покажу как будет выглядеть сценарий, а потом объясню, как это сделать.

Я оставил только один веб-хук триггер, который принимает запросы на /webhook/calсulator, остальные удалил.
Чтобы удалить связку узлов, нужно навести на стрелку связи и нажать иконку корзины.
Перевяжите узлы как показано на картинке.
В настройках узла Switch добавьте условия для каждой операции:

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

Как вы видите в узле Switch я добавил 4 условия для каждой операции калькулятора.
Каждое правило проверяет значение поля ``, которое указывает на входящие данных в узел Switch. Проверяет на равенство строке addition, subtraction, multiplication и division.
В этой ситуации мы проверяем на равенство строке, но можно проверять и на другие условия, например, не равно, больше или меньше, содержит и т.д.

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

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

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

Вы увидите табы и в какую ветку передались данные. В данном случае произошла проверка условия operation = addition, и данные передались в ветку Addition.
Выводы
Узел Switch позволяет создавать ветвления в сценарии на основе условий.
Это удобно, когда нужно обрабатывать разные варианты входящих данных и выполнять разные действия в зависимости от них.
В нашем случае мы благодаря узлу Switch избавились от дублирования узлов триггеров.
Является ли это оптимизацией? Да, но у нас практически полностью дублируются узлы операций калькулятора и ответ на запросы.