При создании эндпойнта для бизнес-процесса необходимо указать тип данных, который будут отправлены в данном запросе (Request payload type). Наиболее распространенным вариантом является JSON, он позволяет в удобном виде указать все необходимые параметры, передать модель данных или массив объектов. Помимо этого возможны и другие варианты, например, XML или Multipart Form (в случае необходимости отправки файлов).
При этом допустима ситуация когда точная структура не известна заранее (или она просто не имеет значения). В этом случае разумным вариантом является использование “сырых” запросов (Raw).
Представим ситуацию, когда это может понадобиться. Допустим, что сервис, который мы разрабатываем, является лишь связующим звеном. Его задача получить запрос от пользователя, проверить авторизацию, сохранить логи, выполнить защиту от спама, и если все в порядке, то перенаправить запрос дальше.
Важной особенностью Raw-запросов является то, что при проектировании бизнес-процессов не используются никакие входные параметры. Вместо этого для получения тела запроса используется специальный блок - Get Request Body. Если же интересует расширенная информация о запросе, то подходящим вариантом будет блок Current Request Info - он возвращает не только тело запроса, но и дополнительные параметры, а также заголовки запроса.
В случае когда нас интересует конкретный заголовок из запроса, его можно получить с использованием блока Get Request Header. В приведенном примере с его помощью считывается заголовок X-Real-IP, который содержит IP-адрес запроса. Полученный IP передается в функцию, которая должна проверить, что данный IP допустим к использованию и не находится в черном списке запрещенных адресов. В результате процесс либо будет прерван, с соответствующим сообщением об ошибке, либо, если все в порядке, будет разрешено дальнейшее выполнение.
Сам запрос, полученный как Raw, представлен в виде массива байт. Для удобства восприятия его можно преобразовать в строку (блок To String) и именно в таком виде сохранить информацию в логах.
При этом сам запрос, без каких-либо преобразований, можно перенаправить дальше с помощью блок HTTP Request. В данном примере указывается метод запроса, его URL и тело запроса (получено из блока Current Request Info). Результат работы блока HTTP Request используется, как результат работы всего бизнес-процесса.
На скриншоте представлен итоговый бизнес процесс. Обратите внимание, что блоки функций (FUNC Save request Log и FUNC IP Blacklist Check) приведены в качестве примера и существуют только в рамках данного проекта.
Таким образом эндпойнт может использоваться для работы с любым запросом, независимо от его реального содержания. Не нужно знать точный запрос, который должен отправиться в сторонний сервис, и даже в случае каких-то изменений в нем (дополнение модели, переименование параметров) можно продолжать пользоваться эндпойнтом без внесения правок в проект.