Принципы работы расширения
В первую очередь стоит прочитать пользовательское описание расширения
Здесь постараюсь описать принципы работы расширения изнутри.
Причины
Сервис, представляемый расширением, может работать как самостоятельно, так и в связке с Vanessa Automation. Основное назначение сервиса - работа с базой при выполнении различных тестовых сценариев, где база 1С является внешней по отношению к тестируемой системе. Сервис позволяет посредством REST API работать с базой 1С извне.
В сервис заложены следующие принципы.
- Сервис построен по принципам REST API
- Сериализация в JSON. Использование примитивных типов при обмене данными (DTO). Отказ от стандартного сериализатора 1С
- Описание API в формате OpenAPI
- Максимально дружелюбно для пользователя (тестировщика)
- Простота расширяемости
- Простая возможность кастомизации в конечной базе
Есть различные подходы к организации подобных сервисов:
- OData - работает из коробки и предоставляет обширные возможности для CRUD операций.
- Web-сервис или http-сервис с использованием стандартного сериализатора 1С.
- Прочие варианты.
Но при разработке расширения было принято решение создать свой велосипед по следующим причинам.
- Удобство написания и чтения сценариев. При использовании OData или стандартного сериализатора 1С необходимо указывать уникальные идентификаторы, а это затрудняет разработку и чтение сценариев. Поэтому используется свой формат сериализации/десериализации ссылок.
- В OData отсутствует возможность переопределить поведение при изменении объекта, не редко необходимо выполнить дополнительные действия при записи объекта, связано это с тем, что часть логики не редко находится на клиенте (в форме).
- При использовании стандартного сериализатора 1С необходимо передавать объект полностью, нельзя его пропатчить, изменить только часть свойств, это также относится к OData, при изменении табличных частей.
- Отсутствует возможность передавать дополнительные параметры.
- Отсутствует работа с "другими" данными, регламентными заданиями, пользователями ИБ, планами обмена и т.д.
Схема обработки запроса
Сервис принимает запросы через универсальный шаблон и сам определяет какой метод вызывать, на основании шаблонов, зарегистрированных в модулях обработчиках.
На основании шаблона извлекаются подстановочные данные из запроса. Например, для шаблона /АктивныеПользователи/{НомерСеанса} будет извлечено значение номера сеанса. Также десериализуется тело запроса.
Все эти данные передаются в модуль-обработчик, который реализует логику операции. Полученный ответ сериализуется и отправляется клиенту.
Обработка ошибок
При возникновении ошибки обработки данных иногда бывает очень трудно определить причину и место возникновения.
Для решения этой проблемы в каждый метод обработки передается структура СтатусОбработкиЗапрос, она позволяет накапливать стек ошибок и дополнять их информацией. Также ошибки делятся на классы, например, ошибка сериализации, ошибка поиска записи в базе и тд.
Для обработки ошибок имеется пара методов расширения в модуле РатОбщий.
ЗафиксироватьОшибку- Сохраняет ошибку в структуруСтатусОбработкиЗапросКлассыОшибок- возвращает описание классов, классы характеризуются кодом ответа, идентификатором и описанием
При грамотной организации обработки ошибок будет легко разбираться в возникающих проблемах.
Преобразование данных и DTO
Для передачи данных между клиентом и сервером используются примитивные объекты (DTO), которые вы должны преобразовать в сущности 1С. Часть таких преобразований реализована в модуле РатПреобразования.