Синхронный ответ в работе REST API
Система-потребитель отправляет в Платформу запрос, содержащий идентификатор требуемого пользователя. Платформа отправляет запрос на получение пользователя в Систему-источник, после чего возвращает ответ Системе-потребителю.
Предварительные условия
Созданы следующие элементы:
Внешний тип данных Инициирующий запрос для сценария с синхронным ответом
Тип данных Ответ в сценарии с синхронным ответом
Система-потребитель с типом Расширенное REST API в сценарии синхронного ответа инициирует процесс отправкой в Платформу сообщения с внешним типом Инициирующий запрос для сценария с синхронным ответом.
Внешняя Система-потребитель с типом Расширенное REST API в сценарии синхронного ответа:
Тип: Расширенное Rest API
Порт для публикации API: любой свободный
К Системе-потребителю с типом Расширенное REST API в сценарии синхронного ответа привязан обработчик Запрос системы-потребителя с типом Расширенное REST API в сценарии с синхронным ответом.
Обработчик Запрос системы потребителя с типом Расширенное REST API в сценарии с синхронным ответом
Тип: Веб-обработчик
Шаблон пути: /СценарийСинхронныйОтветИнициирующийЗапрос
Тип метода: Post
Ожидание ответа: включено
На вкладке В Platform добавлена переменная запрос с внешним типом Инициирующий запрос для сценария с синхронным ответом.
На вкладке Из Platform добавлена переменная Ответ с типом Ответ в сценарии с синхронным ответом.
Описание процесса
Бизнес процесс «Процесс синхронного ответа»
Запускать автоматически: включено
Переменная обработки: переменная запрос с внешним типом Инициирующий запрос для сценария с синхронным ответом.
Добавлена переменная Ответ с типом Ответ в сценарии с синхронным ответом.
В схему обработки добавлены следующие шаги:
Шаг Отправка в Систему-источник
Обработчик: Запрос в систему источник в сценарии с синхронным ответом
Тип получателя: Модуль
Получатель: Система-источник в сценарии с синхронным ответом
Ожидание: Ожидать ответа
Время ожидания: 10000(мс)
В локальных переменных шага добавлена переменная ид и произведен маппинг ид_запроса в переменной запрос для передачи значения Идентификатора пользователя в параметры обработчика.
Для использования полученного ответа далее по цепочке схемы процесса, в шаге настроен маппинг полученного сообщения ОтветноеСообщение в переменную ответ на вкладке Результат выполнения.
Система-источник данных: внешняя система с типом Веб-сервис Система-источник в сценарии с синхронным ответом (клиент), настроенная на тестовый сервис https://gorest.co.in/, предоставляющий ресурсы для тестирования REST API: отправляется запрос https://gorest.co.in/public/v2/users/6221756 , в котором значение 6221756 является идентификатором пользователя.
После обработки запроса сервис возвращает ответ со следующей структурой:
Система-источник в сценарии с синхронным ответом:
Тип: Веб-сервисы
Протокол: 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, кодОтвета);
Шаг Отправка «Отправка ошибки получателю»
Сообщение: InitMessage (в функции задаются свойства кода и описании ошибки в InitMessage)
Тип получателя: Модуль
Получатель: InitSource
Ожидание: Ожидание не требуется
Это ответ: включено
Демо-пример
Успешная обработка сообщения
Действия пользователя:
Создать запрос в Postman и выполнить отправку.
Выбрать метод Post.
В URL прописать адрес Системы-потребителя с типом REST API в сценарии синхронного ответа + шаблон пути обработчика Запрос системы-потребителя с типом Расширенное REST API в сценарии с синхронным ответом.
В тело сообщения внести значение ид_запроса, которое требуется получить на ресурсе https://gorest.co.in/:
Код:
{ "ид_запроса":6221756
}
Результат: ответ успешно получен.
Неуспешная обработка сообщения
Вариант 1: Обработка сообщения недопустимого формата
Действия пользователя:
Выполнить отправку невалидного запроса в Postman, например:
{
"ид_запроса":6221756
}
Результат:
В Postman вернется код ошибки 500 с описанием ошибки.
В ЦМ в журнале зарегистрировано событие о попытке отправки невалидного запроса.
Вариант 2: Превышение времени ожидания ответа
За время ожидания, заданное на шаге Отправка в Систему-источник, ответ от ресурса не получен.
Результат:
Вариант 3: Несуществующий адрес
Действия пользователя:
Отправить запрос из Postman с идентификатором несуществующего пользователя.
Создать запрос в Postman и выполнить отправку.
Выбрать метод Post.
В URL прописать адрес Системы-потребителя с типом REST API в сценарии синхронного ответа + шаблон пути обработчика ref:Запрос системы-потребителя с типом Расширенное REST API в сценарии с синхронным ответом <rest_handler_sync>.
В тело сообщения внести значение ид_запроса, которое требуется получить на ресурсе https://gorest.co.in/:
{ "ид_запроса":6221756 }
Результат:
Система-потребитель отправит запрос в Платформу и будет ожидать ответа. Платформа выполнит обработку запроса, сформирует и отправит некорректный запрос, так как был указан неверный шаблон пути).
В ЦМ Системы-источника будет зафиксировано событие о выполнении обработчика. Тестовый сервис не сможет разобрать структуру запроса и вернет ответ с кодом 404 и текстом ошибки.
Не удалось выполнить метод Get по адресу https://gorest.co.in/public/v2/users/1756: код ответа 404 NotFound: {«message»:»Resource not found»}