Зачем это нужно?
Каждый раз когда мне приходится выполнять какую-то интеграцию, я слышу про 1С одно и то же. У систем 1С или нет контрактов совсем, или они не соблюдаются чуть более чем полностью.
Регулярно вижу запросы от коллег, вроде: "Сформировал тестовый json! Прошу проверить на корректность"
Данная подсистема призвана дать возможность выявлять проблемы в ваших интеграциях на более ранней стадии.
Если сформированный вами пакет - не проходит валидацию, то нет смысла отправлять его в систему-приемник.
Или же, если принятое сообщение не содержит обязательных полей, зачем нам делать что-то дальше? Мы можем сразу ответить, что не будем его обрабатывать, и вернуть ошибку.
Как пользоваться подсистемой
Если вкратце, то надо вызвать ровно одну функцию:
МассивОшибок = ВалидаторПакетов.Валидировать(МодельДанных, ИмяСхемыМодели, СпецификацияOpenApi);
МодельДанных - Это собственно наши данные. Можно передавать Структуру, соответствие, Массив или же примитивы(Булево, строку или число)
ИмяСхемыМодели - Имя схемы в спецификации OpenApi
СпецификацияOpenApi - Ну и наконец, спецификация - Это строка в формате JSON. Ваша openApi спецификация, которую вы скачали по ссылке, или же сохранили куда-нибудь в макет.
Все, на выходе у вас будет структура содержащая результат валидации, массив ошибок и массив предупреждений. Если ошибок нет, то валидация прошла успешно!
В приложенной конфигурации есть Демо-обработка, в которой можно вставлять свои данные и валидировать их.
Текущие возможности
- Валидация строк
- Максимальная и минимальная длина строк
- соответствие форматам и паттернам
- Валидация значений, которые сериализуются в строки(т.е. с форматом uuid можно валидировать уникальныйИдентификатор, а с date - дату)
- Валидация чисел
- Проверка целых чисел
- Проверка на больше-меньше
- Проверка на кратность
- Валидация массивов
- Проверка уникальных значений
- Проверка на количество элементов
- Проверки всех элементов на соответствие вложенным схемам
- Проверки объектов
- Проверка на количество свойств
- Обработка флага "additionalProperties" валидация по вложенной схеме так же работает
- Обработка Обязательных элементов
- Базовые возможности
- Разрешение $ref
- Обработка nullable
- Работа с конструкциями allOf, anyOf и oneOf, not
- Обработка дискриминатора
- Обработка depricated. (Не влияют на результат валидации, но позволяют обрабатывать предупреждения)
Чего пока нет
Нет фильтрации свойств на основании признаков readonly и writeonly
Нет поддержки xml
Требования к платформе
Для работы разбора форматов строк требуются регулярные выражения, потому требуется платформа 8.3.23+, но вы всегда можете просто убрать проверку форматов, если вдруг она вам не нужна. И тогда в целом почти любая платформа подойдет.
Тестировалось на 8.3.23, 8.3.24, 8.3.25
Благодарности
За основу была взята разработка Данная разработка
Где скачать?
Код разработки открыт и доступен на github