Синхронный ответ в работе Веб-сервиса
Система-потребитель отправляет в Платформу запрос, содержащий идентификатор требуемого пользователя. Платформа отправляет запрос на получение пользователя в Систему-источник, после чего возвращает ответ Системе-потребителю.
Предварительные условия
Созданы следующие элементы:
Внешний тип данных Инициирующий запрос для сценария с синхронным ответом
Тип данных Ответ в сценарии с синхронным ответом
Система-потребитель с типом Веб-сервис в сценарии синхронного ответа.
Система-потребитель с типом Веб-сервис в сценарии синхронного ответа инициирует процесс отправкой в Платформу сообщения с внешним типом Инициирующий запрос для сценария с синхронным ответом.
Тип: Веб-сервисы
Протокол: REST
Формат: JSON
Способ получения сообщений в Patform: Внешний сервис вызывает методы Platform
Порт: любой свободный
К Системе-потребителю с типом Веб-сервис в сценарии синхронного ответа привязан обработчик Запрос системы потребителя с типом Веб-сервис в сценарии с синхронным ответом.
Обработчик Запрос системы потребителя с типом Веб-сервис в сценарии с синхронным ответом
Тип: Веб-сервер
Направление интеграции: В Platform
Ожидание ответа: включено
На вкладке В Platform добавлена переменная запрос с внешним типом Инициирующий запрос для сценария с синхронным ответом.
На вкладке Из Platform добавлена переменная ответ с типом Ответ в сценарии с синхронным ответом.
Описание процесса
Бизнес процесс «Процесс синхронного ответа»
Запускать автоматически: включено
Переменная обработки: переменная запрос с внешним типом Инициирующий запрос для сценария с синхронным ответом.
Добавлена переменная ответ с типом Ответ в сценарии с синхронным ответом и ошибка с типом Сообщение.
В схему обработки добавлены следующие шаги:
Шаг Отправка «ЗапросВGorest»
Обработчик: Запрос в систему-источник в сценарии с синхронным ответом
Тип получателя: Модуль
Получатель: Система-источник в сценарии с синхронным ответом
Ожидание: Ожидать ответа
Время ожидания: 10000(мс)
В локальных переменных шага добавлена переменная ид и произведен маппинг ид_запроса в переменной запрос для передачи значения идентификатора пользователя в параметры обработчика.
Для использования полученного ответа далее по цепочке схемы процесса, в шаге настроен маппинг полученного сообщения ОтветноеСообщение в переменную ответ на вкладке Результат выполнения
Система-источник данных: внешняя система с типом Веб-сервис Система-источник в сценарии с синхронным ответом (клиент), настроенная на тестовый сервис https://gorest.co.in/, предоставляющий ресурсы для тестирования REST API: отправляется запрос https://gorest.co.in/public/v2/users/5454462 , в котором значение 5454462 является идентификатором пользователя.
После обработки запроса сервис возвращает ответ со следующей структурой:
Система-источник в сценарии с синхронным ответом:
Тип: Веб-сервисы
Протокол: REST
Формат: JSON
Способ получения сообщений из Patform: Platform вызывает методы Внешнего сервиса
Базовый URL сервиса подключаемой системы: https://gorest.co.in
К Системе-источнику в сценарии с синхронным ответом привязан обработчик Запрос в систему источник в сценарии с синхронным ответом
Обработчик Запрос в систему источник в сценарии с синхронным ответом:
Тип: Веб-клиент
Направление интеграции: из Platform
Шаблон пути: /public/v2/users/{ид}, где ид - параметр тип int
Тип метода: Get
Ожидание ответа - включено
На вкладке Параметры задан ид с типом int для передачи идентификатора пользователя.
Шаг Отправка «Ответ»
Сообщение: переменная ответ
Тип получателя: Модуль
Получатель: InitSource
Ожидание: Ожидание не требуется
Это ответ: включено
Шаг Функция «ПробросОшибки»
Для возвращения ошибки в случае неуспешной отправки создана функция ПробросОшибки.
Во входных параметрах переменной Описание ошибки передается значение исключения в случае неуспешной отправки LastException. В выходных параметрах смапплена переменная Сообщение с переменной ошибка.
Функция ПробросОшибки:
Запускать автоматически: выключено (данная функция вызывается в бизнес процессе)
Добавлены переменные:
ОписаниеОшибки
кодОтвета
Сообщение
Код:
InitMessage.SetProperty(MessageProperties.ResponseMessage, ОписаниеОшибки); int index = ОписаниеОшибки.IndexOf("код ответа"); if (index != -1) { string substring = ОписаниеОшибки.Substring(index + "код ответа".Length).Trim(); if (!string.IsNullOrEmpty(substring)) { string statusCode = new string(substring.TakeWhile(char.IsDigit).ToArray()); //Logger.Debug(statusCode); кодОтвета = statusCode; } } InitMessage.SetProperty(MessageProperties.ResponseCode, кодОтвета);
Шаг Отправка «Отправка ошибки получателю»
Сообщение: переменная ошибка
Тип получателя: Модуль
Получатель: InitSource
Ожидание: Ожидание не требуется
Это ответ: включено
Демо-пример
Успешная обработка сообщения
Действия пользователя:
Создать запрос в Postman и выполнить отправку.
Выбрать метод Post.
В URL прописать адрес Системы-потребителя с типом Веб-сервис в сценарии синхронного ответа + /request?timeout=15.
В тело сообщения внести закодированное сообщение в Base64 (значение ид_запроса требуется получить на ресурсе https://gorest.co.in/):
Код:
{ "body":"ewogICAgItC40LRf0LfQsNC/0YDQvtGB0LAiOjYyMjE3NTYKfQ==" }
Результат: ответ успешно получен.
Неуспешная обработка сообщения
Вариант 1: Обработка сообщения недопустимого формата
Действия пользователя:
Создать запрос в Postman и выполнить отправку.
Выбрать метод Post.
В URL прописать адрес Системы-потребителя с типом Веб-сервис в сценарии синхронного ответа + /request?timeout=15.
В тело сообщения внести закодированное сообщение в Base64 (значение ид_запроса требуется получить на ресурсе https://gorest.co.in/):
{ "ид_запроса":6221756 }
Результат:
[UnhandledException] An unhandled exception has occurred while executing the request. DT.Net.Exceptions.RequestException: Сообщение не передано
Вариант 2: Неуспешная обработка сообщения (истек таймаут)
Действия пользователя:
Открыть схему обработки Сценарий2СинхронныйОтвет.
Открыть параметры шага ЗапросВGorest и установить время ожидания ответа 1 мс.
Сохранить и применить схему.
Отправить запрос.
Результат:
Вариант 3: Некорректная структура запроса
Действия пользователя:
1. Передать в запросе несуществующий идентификатор пользователя. 3. Отправить запрос из Postman.
Результат:
В ЦМ Системы-источника будет зафиксировано событие о выполнении обработчика. Тестовый сервис не сможет разобрать структуру запроса и вернет ответ с кодом 404 и текстом ошибки.