Реализация продвинутой обработки запросов HTTP сервиса

05.10.19

Интеграция - WEB-интеграция

Стандартный функционал маршрутизации не позволяет использовать regexp при обработке адреса, организация модуля приводит к дублированию кода. Так же при ошибке исполнения нет фиксации в журнале регистрации. В статье опишу свой взгляд на решение обозначенных проблем.

Вводные:

1. Стандартная система обработки запросов через HTTP сервис.

Цель:

Получить общую цепочку обработки запроса с возможностью

1. включения обработчиков в любой точке конвейера

2. обработки URL с помощью regexp

3. обработки исключений исполнения кода.

Реализация:

В HTTP сервисе создаем один "Шаблон URL" с шаблоном "/*", в нем создаем обработчик с "HTTP-метод" = "Любой".

 
 Код HTTP сервиса

В общем модуле реализуем обработку

 
 Функция ОбработатьHTTPЗапрос

 

Сначала формирую структуру ответа, чтобы в дальнейшем её стандартно сериализовать в ответ.

 
 Функции по структуре ответа

При желании можно добавить нужную сериализацию.

 

Далее разбираю строку URL и ищу маршрут. Так же вычисляю значения параметров URL строки. При формирование таблицы маршрутов и структуры паттернов шаблона запрашиваю значения из модуля с реализацией обработки маршрута.

 
 Функции реализации поиска маршрута

 

 
 Функции получения таблицы маршрутов и паттернов параметров

Поиск идет по таблице значений в которой фиксирую шаблон например "/hello/{guid}". Перед поиском шаблон преобразую в regexp строку заменой {} на паттерны описанные в "СтруктураНастроекПаттерна". В результате получаем гибкость в фильтрации запросов.

 

Для разбора используется реализация regexp через "VBScript.RegExp".

 
 Реализация работы с regexp

 

Если маршрут найден то управление передается в модуль реализации бизнес логики.

 
 Реализация передачи

 

Функция "ВыполнитьМаршрут" намеренно обернута в "Попытка Исключение" для обработки ошибок, клиенту знать состав ошибки не нужно и в ЖР их нужно фиксировать.

Валидацию, аутентификацию, декодирование тела запроса можно делать централизовано добавив функции в начало функции "ВыполнитьМаршрут".

Сборки (cfe) нет, т.к. пока не придумал как её организовать в формате "поставил-попробовал", все ключевые функции в статье под спойлерами.

Благодарю за внимание.

 

P.S.

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

См. также

Интеграция Альфа Авто 5 / Альфа Авто 6 и AUTOCRM / Инфотек

Сайты и интернет-магазины WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM разных брендов в одной информационной базе в ручном и автоматическом режиме.

36000 руб.

03.08.2020    16191    14    18    

14

Интеграция 1С — Битрикс24. Обмен задачами

Сайты и интернет-магазины Интеграция WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Управленческий учет Платные (руб)

Интеграция 1С и Битрикс24. Разработка имеет двухстороннюю синхронизацию 1С и Битрикс24 задачами. Решение позволяет создавать пользователя в 1С из Битрикс24 и наоборот. Данная разработка технически подходит под все основные конфигурации линейки продуктов 1С:Предприятие 8.3 (платформа начиная с 8.3.23). При приобретении предоставляется 1 месяц бесплатных обновлений разработки. Доступна демо-версия продукта с подключением Вашего Битрикс24

5040 руб.

04.05.2021    18311    10    15    

16

Модуль для обмена "1С:Предприятие 8. УАТ. ПРОФ" с FortMonitor

WEB-интеграция 8.3.8 Конфигурации 1cv8 Автомобили, автосервисы Беларусь Украина Россия Казахстан Управленческий учет Платные (руб)

Расширение предназначено для конфигурации "1С:Предприятие 8. Управление Автотранспортом. ПРОФ". Функционал модуля: 1. Заполнение регистров сведений по подсистеме "Мониторинг", а именно: события по мониторингу, координаты по мониторингу, пробег и расход по мониторингу, текущее местоположение ТС по мониторингу 2. Заполнение путевого листа: пробег по мониторингу, время выезда/заезда, табличная часть ГСМ, места стоянок по геозонам. 3. Отчеты по данным загруженным в регистры сведений. 4. Предусмотрена автоматическая загрузка данных в фоновом режиме (условия работы данной загрузке читайте в описании товара) Модуль работает без включенной константы по настройкам мониторинга. Модуль формы предоставляется с открытым кодом, общий модуль защищен. Любой заинтересованный пользователь, имеет возможность скачать демо-версию расширения.

22656 руб.

25.05.2021    13049    34    8    

13

Автоматическая загрузка файлов (например, прайс-листов) из электронной почты, FTP, HTTP, их обработка и выгрузка на FTP (на сайт) и для других целей

Прайсы WEB-интеграция Ценообразование, анализ цен Файловый обмен (TXT, XML, DBF), FTP Автомобили, автосервисы Оптовая торговля, дистрибуция, логистика Управленческий учет Платные (руб)

Программа с заданным интервалом времени (или по ручной команде) скачивает файлы (например, прайс-листы поставщиков) из различных источников: письма электронной почты, FTP или HTTP-адреса, и сохраняет их в каталог упорядоченной структуры. При этом извлекает файлы из архивов, может переименовывать файлы и менять их формат (csv, xls, txt). Можно настроить выгрузку обработанных файлов на сайт (через FTP-подключение). Программа будет полезна компаниям, у которых есть большое количество поставщиков и/или прайс-листы поставщиков обновляются часто (необязательно прайс-листы, файлы могут быть любого назначения). Собранные таким образом актуальные версии прайс-листов можно выгрузить с помощью программы себе на сайт (или на любой FTP-сервер) или выполнить другие необходимые задачи.

25200 руб.

28.05.2015    85606    26    51    

50

Интеграция с сервисом vetmanager

WEB-интеграция Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Бытовые услуги, сервис Платные (руб)

Внешняя обработка разрабатывалась для загрузки документов из Ветменеджер в 1С: Бухгалтерия 3.0

12000 руб.

02.02.2021    16691    43    49    

24
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. nbeliaev 830 29.04.20 07:27 Сейчас в теме
Интересная идея с маршрутизатором конечно. Как мне кажется, вы хотели сделать что-то на подобии обработки запросов в Spring MVC (Java). Но кажется, что работа с COMОбъект убивает и производительность и идею в целом (
2. malikov_pro 1300 29.04.20 07:46 Сейчас в теме
(1) Активно использую Symfony, подход оттуда брал, в Spring думаю подобно.
Использую COM, т.к. нормального regexp решения под 1С не нашел. Использовать сериализатор XML вариант, но он не позволяет вытаскивать параметры, только проверять корректность всей строки. Подумать, доработать думаю можно.
"Серебряная пуля" выложили хакатон за 2019, посмотрю как они эти вопросы решают, возможно дополню статью.
Если есть идея как организовать валидацию (подобное https://symfony.com/doc/4.4/validation.html) - то буду рад проработать реализацию.
3. nbeliaev 830 29.04.20 07:52 Сейчас в теме
(2)
Использовать сериализатор XML вариант
это вы про то, как можно через pattern в XDTO regexp использовать?
4. malikov_pro 1300 29.04.20 07:59 Сейчас в теме
(3) Да, брал наработки из этой статьи https://infostart.ru/public/464971/
Оставьте свое сообщение