Реализация продвинутой обработки запросов 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 пока не получилось реализовать.

См. также

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

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

36000 руб.

03.08.2020    17799    19    22    

17

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

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

5040 руб.

04.05.2021    19881    13    17    

17

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

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

22656 руб.

25.05.2021    14435    42    8    

18

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

Расширение значительно упрощает написание API на 1С. Веб программисты получают простой и понятный доступ к 1С. Описание API создаётся автоматически и представляется в виде удобном как для человека, так и для программной обработки.

24000 руб.

27.09.2024    1202    1    0    

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