Синхронный ответ в работе Веб-сервиса

Система-потребитель отправляет в Платформу запрос, содержащий идентификатор требуемого пользователя. Платформа отправляет запрос на получение пользователя в Систему-источник, после чего возвращает ответ Системе-потребителю.

../_images/image157.png

Предварительные условия

Созданы следующие элементы:

  • Внешний тип данных Инициирующий запрос для сценария с синхронным ответом

    ../_images/image225.png
  • Тип данных Ответ в сценарии с синхронным ответом

    ../_images/image310.png

  • Система-потребитель с типом Веб-сервис в сценарии синхронного ответа.

Система-потребитель с типом Веб-сервис в сценарии синхронного ответа инициирует процесс отправкой в Платформу сообщения с внешним типом Инициирующий запрос для сценария с синхронным ответом.

  • Тип: Веб-сервисы

  • Протокол: REST

  • Формат: JSON

  • Способ получения сообщений в Patform: Внешний сервис вызывает методы Platform

  • Порт: любой свободный

../_images/image44.png

К Системе-потребителю с типом Веб-сервис в сценарии синхронного ответа привязан обработчик Запрос системы потребителя с типом Веб-сервис в сценарии с синхронным ответом.


Описание процесса

Бизнес процесс «Процесс синхронного ответа»

Запускать автоматически: включено

../_images/image83.png

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

Добавлена переменная ответ с типом Ответ в сценарии с синхронным ответом и ошибка с типом Сообщение.

../_images/image95.png

В схему обработки добавлены следующие шаги:

Шаг Отправка «ЗапросВGorest»

../_images/image109.png

В локальных переменных шага добавлена переменная ид и произведен маппинг ид_запроса в переменной запрос для передачи значения идентификатора пользователя в параметры обработчика.

../_images/image1112.png

Для использования полученного ответа далее по цепочке схемы процесса, в шаге настроен маппинг полученного сообщения ОтветноеСообщение в переменную ответ на вкладке Результат выполнения

../_images/image1212.png

После обработки запроса сервис возвращает ответ со следующей структурой:

../_images/image1312.png
  • Система-источник в сценарии с синхронным ответом:

    • Тип: Веб-сервисы

    • Протокол: REST

    • Формат: JSON

    • Способ получения сообщений из Patform: Platform вызывает методы Внешнего сервиса

    • Базовый URL сервиса подключаемой системы: https://gorest.co.in

    ../_images/image1411.png

К Системе-источнику в сценарии с синхронным ответом привязан обработчик Запрос в систему источник в сценарии с синхронным ответом

  • Обработчик Запрос в систему источник в сценарии с синхронным ответом:

    • Тип: Веб-клиент

    • Направление интеграции: из Platform

    • Шаблон пути: /public/v2/users/{ид}, где ид - параметр тип int

    • Тип метода: Get

    • Ожидание ответа - включено

    ../_images/image158.png

    На вкладке Параметры задан ид с типом int для передачи идентификатора пользователя.

    ../_images/image162.png

Шаг Отправка «Ответ»

  • Сообщение: переменная ответ

  • Тип получателя: Модуль

  • Получатель: InitSource

  • Ожидание: Ожидание не требуется

  • Это ответ: включено

../_images/image172.png

Шаг Функция «ПробросОшибки»

Для возвращения ошибки в случае неуспешной отправки создана функция ПробросОшибки.

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

../_images/image184.png
../_images/image1910.png

  • Функция ПробросОшибки:

    Запускать автоматически: выключено (данная функция вызывается в бизнес процессе)

    ../_images/image20.png

    Добавлены переменные:

    • ОписаниеОшибки

    • кодОтвета

    • Сообщение

    ../_images/image2111.png

    Код:

    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

  • Ожидание: Ожидание не требуется

  • Это ответ: включено

../_images/image226.png

Демо-пример

Успешная обработка сообщения

Действия пользователя:

  1. Создать запрос в Postman и выполнить отправку.

  2. Выбрать метод Post.

  3. В URL прописать адрес Системы-потребителя с типом Веб-сервис в сценарии синхронного ответа + /request?timeout=15.

  4. В тело сообщения внести закодированное сообщение в Base64 (значение ид_запроса требуется получить на ресурсе https://gorest.co.in/):

    ../_images/image233.png

Код:

{

"body":"ewogICAgItC40LRf0LfQsNC/0YDQvtGB0LAiOjYyMjE3NTYKfQ=="

}

Результат: ответ успешно получен.

../_images/image242.png
../_images/image254.png

Неуспешная обработка сообщения

Вариант 1: Обработка сообщения недопустимого формата

Действия пользователя:

  1. Создать запрос в Postman и выполнить отправку.

  2. Выбрать метод Post.

  3. В URL прописать адрес Системы-потребителя с типом Веб-сервис в сценарии синхронного ответа + /request?timeout=15.

  4. В тело сообщения внести закодированное сообщение в Base64 (значение ид_запроса требуется получить на ресурсе https://gorest.co.in/):

    {
    
    "ид_запроса":6221756
    
    }
    

Результат:

[UnhandledException] An unhandled exception has occurred while executing the request. DT.Net.Exceptions.RequestException: Сообщение не передано

../_images/image263.png

Вариант 2: Неуспешная обработка сообщения (истек таймаут)

Действия пользователя:

  1. Открыть схему обработки Сценарий2СинхронныйОтвет.

  2. Открыть параметры шага ЗапросВGorest и установить время ожидания ответа 1 мс.

  3. Сохранить и применить схему.

  4. Отправить запрос.

Результат:

../_images/image2712.png
../_images/image2810.png
../_images/image294.png

Вариант 3: Некорректная структура запроса

Действия пользователя:

1. Передать в запросе несуществующий идентификатор пользователя. 3. Отправить запрос из Postman.

Результат:

В ЦМ Системы-источника будет зафиксировано событие о выполнении обработчика. Тестовый сервис не сможет разобрать структуру запроса и вернет ответ с кодом 404 и текстом ошибки.

../_images/image307.png