Реализация продвинутой обработки запросов 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С:ITIL, 1С:ITILIUM, Управление IT-отделом 8 через интернет с любого устройства посредством браузера, увеличивая эффективность работы пользователей и снижая нагрузку на сервер. Быстрая инсталляция портала за пару часов, удобный и интуитивно понятный интерфейс и безопасность данных помогут упростить работу с порталом и ускорить выполнение бизнес-процессов компании.

128000 руб.

19.12.2023    2135    2    0    

9

Оптовая торговля Розничная торговля WEB-интеграция 1С:Управление торговлей 10 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Платные (руб)

Онлайн-заказ - это решение для автоматизации процесса оформления заказов на сайте в торговых организациях. Продукт обеспечивает легкое взаимодействие между компанией и клиентами через веб-интерфейс, интегрированный с 1С:Предприятие. Система позволяет снизить операционные расходы, повысить лояльность клиентов и оптимизировать работу отдела продаж.

57600 руб.

26.11.2024    1865    1    1    

4

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

Модуль "Подсистема интеграции AmoCRM с 1С" позволяет обеспечить единое информационное пространство, в котором пользователи могут эффективно управлять клиентской базой, следить за статусами сделок и поддерживать актуальность данных как в AmoCRM, так и в 1С. Бесплатный период Техподдержки - 1 месяц.

60000 руб.

07.05.2019    34171    63    45    

24

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

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

24000 руб.

27.09.2024    3372    3    2    

4

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

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

12000 руб.

02.02.2021    18527    53    50    

29

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

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

36000 руб.

03.08.2020    18774    20    22    

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