Синхронный ответ в работе REST API

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

../_images/rest_main.png

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

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

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

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

    ../_images/rest2.png

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

  • Внешняя Система-потребитель с типом Расширенное REST API в сценарии синхронного ответа:

    • Тип: Расширенное Rest API

    • Порт для публикации API: любой свободный

    ../_images/rest3.png

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


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

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

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

../_images/rest7.png

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

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

../_images/rest8.png

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

Шаг Отправка в Систему-источник

../_images/rest9.png

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

../_images/rest10.png

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

../_images/rest11.png

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

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

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

    • Протокол: REST

    • Формат: JSON

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

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

    ../_images/rest13.png

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

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

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

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

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

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

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

    ../_images/rest14.png

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

    ../_images/rest15.png

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

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

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

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

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

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

../_images/rest16.png

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

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

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

../_images/rest17.png
../_images/rest18.png

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

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

    ../_images/rest19.png

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

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

    • кодОтвета

    ../_images/rest20.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, кодОтвета);
    

Шаг Отправка «Отправка ошибки получателю»

  • Сообщение: InitMessage (в функции задаются свойства кода и описании ошибки в InitMessage)

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

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

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

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

../_images/rest21.png

Демо-пример

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

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

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

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

  3. В URL прописать адрес Системы-потребителя с типом REST API в сценарии синхронного ответа + шаблон пути обработчика Запрос системы-потребителя с типом Расширенное REST API в сценарии с синхронным ответом.

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

    Код:

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

    }

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

../_images/rest22.png

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

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

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

Выполнить отправку невалидного запроса в Postman, например:

{

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

}

Результат:

В Postman вернется код ошибки 500 с описанием ошибки.

../_images/rest23.png

В ЦМ в журнале зарегистрировано событие о попытке отправки невалидного запроса.

../_images/rest24.png
../_images/rest25.png

Вариант 2: Превышение времени ожидания ответа

За время ожидания, заданное на шаге Отправка в Систему-источник, ответ от ресурса не получен.

Результат:

../_images/rest29.png

Вариант 3: Несуществующий адрес

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

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

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

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

  4. В URL прописать адрес Системы-потребителя с типом REST API в сценарии синхронного ответа + шаблон пути обработчика ref:Запрос системы-потребителя с типом Расширенное REST API в сценарии с синхронным ответом <rest_handler_sync>.

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

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

Результат:

Система-потребитель отправит запрос в Платформу и будет ожидать ответа. Платформа выполнит обработку запроса, сформирует и отправит некорректный запрос, так как был указан неверный шаблон пути).

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

Не удалось выполнить метод Get по адресу https://gorest.co.in/public/v2/users/1756: код ответа 404 NotFound: {«message»:»Resource not found»}

../_images/rest28.png
Схема
../_images/rest_scheme.png