Swagger для 1С. Описание сложной структуры входящих и исходящих данных

04.10.21

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

Анонс нового функционала 1Script пакета swagger версии 0.5.0.

Пакет swagger - это open source инструмент на языке OneScript, предназначенный для создания спецификаций HTTP сервисов 1С в формате OpenAPI.

  • Помогает поддерживать документацию в актуальном состоянии.
  • Позволяет зафиксировать API еще до реализации.
  • Не требует встраивания в описываемую конфигурацию.
  • Спецификация OpenAPI по сути является промышленным стандартом описания REST API интерфейсов.

Оригинальная статья: Swagger для 1С

Репозиторий проекта: https://github.com/botokash/swagger

Пример описания метода

 
 Описание метода в модуле HTTP сервиса

Быстрый старт

1. Устанавливаем OneScript

2. Устанавливаем пакет swagger

opm install swagger

3. Выгружаем конфигурацию в файлы

4. Генерируем описание Open-API

swagger generate --src-path <Путь к файлам конфигурации> --out <Путь к директории выгрузки> --host <Адрес веб сервера> --onecbase <Тестовая база 1С>

5. Загружаем описание сервиса из файла в директории выгрузки в редактор https://editor.swagger.io/

Дополнительно:

1. Настраиваем Simple-UI

2. Встраиваем актуализацию описания сервиса с помощью скрипта upload.os в пайплайн Gitlab-CI

Swagger:
  stage: Swagger
  script:
    - chcp 65001
    - oscript tools\upload.os -name TEST_SERVICE -path src\configuration -type xml -adminurl http://localhost/onec-swagger-admin/ -host 127.0.0.1 -onecbase TEST_BASE

Описание методов

Методы описываются текстом в модуле HTTP сервиса. Общий шаблон представлен ниже.

// <Описание метода>
//
// Параметры:
//   <Имя параметра> - <Тип данных> - <Описание параметра>
//
// Варианты вызова:
//   <Формат входящих данных>
//
// Варианты ответа:
//   <Формат исходящих данных>
//
// Коды ответов:
//   <Код ответа> - <Тип данных> - <Описание ответа> ИЛИ <Код ответа> - <Описание ответа>
//
Функция <Обработчик метода>(Запрос)
...
КонецФункции

Параметры

Параметры задаются в формате:

  • <Имя параметра> - <Тип данных> - <Описание параметра>

Для тела запроса (PUT и POST) используется имя параметра body.

Для метода PATCH используются имена property и value.

В блоке параметров может быть описана сложная структура входящих данных. Уровень вложенности параметра определяется количеством знаков * перед именем параметра.

Имя сложного типа должно состоять из одного слова и быть уникальным.

Для описания множественных значений перед названием типа должна быть ключевая фраза Массив из.

Для обязательных параметров в тексте описания нужно добавить ключевое слово обязательный.

Для задания списка возможных значений параметра используется символ ~

  • ~ <Значение перечисления 1> - <Описание значения 1>
  • ~ <Значение перечисления 2> - <Описание значения 2>
// Параметры:
//   userID - Строка - Идентификатор пользователя
//   messageId - Строка - Идентификатор сообщения, обязательный
//   body - Массив из Accept - Информация о подтверждении
//    * orderId - Строка - ID заказа
//    * data - Массив из AdditionalData - Дополнительная информация
//     ** name - Строка - Имя свойства
//     ** value - Массив из Строка - Значения свойства
//    * status - Строка - Статус
//     ~ Подтверждено - Статус "Подтверждено"
//     ~ Отклонено - Статус "Отклонено"

Формат данных

Формат входящих и исходящих данных описывается блоками Варианты вызова и Варианты ответа.

// Варианты вызова:
//   application/json
//   application/xml
//
// Варианты ответа:
//   application/json
//   text/html

Коды ответов

Коды ответа указываются в формате "Код - Описание".

Для каждого кода ответа дополнительно можно определить возвращаемое значение. Для этого код ответа должен быть описан по шаблону "Код - Возвращаемое значение - Описание".

Поддерживается сложная структура возвращаемых данных.

// Коды ответов:
//   200 - Массив из Order - Массив заказов
//    * orderId - Строка - ID заказа
//    * status - Строка - Статус
//    * taskList - Массив из Task - Массив задач
//     ** taskId - Строка - ID задания
//     ** taskNumber - Строка - Номер задания
//   400 - Ошибка выполнения
//   401 - Некорректный токен авторизации

 

swagger rest open-api onescript

См. также

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

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

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

11856 руб.

25.05.2021    11764    9    4    

8

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

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

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

6000 руб.

02.02.2021    14460    34    43    

19

Заполнение по ИНН или наименованию реквизитов контрагента по данным сайта ФНС

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

Обработка является альтернативой механизму, разработанному фирмой 1С и заполняющему реквизиты контрагента по ИНН или наименованию. Не требуется действующей подписки ИТС. Вызывается как внешняя дополнительная обработка, т.е. используется, непосредственно, из карточки контрагента. Заполнение по ИНН или наименованию реквизитов контрагента по данным сайта ФНС (egrul.nalog.ru) для БП 2.0, БП 3.0, БГУ 1.0, БГУ 2.0, УТ 10.3, УТ 11.x, КА 1.1, КА 2.x, УПП 1.x, ERP 2.x, УНФ 1.5, УНФ 1.6, УНФ 3.0, ДО 2.1

2400 руб.

28.04.2016    85211    142    211    

297

Прайс-лист с фотографиями, выгрузкой в Excel с подсчетом суммы заказа, загрузкой заказа в Управление торговлей 11 (Россия) и Управление торговлей для Беларуси 3

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

Прайс-лист для программы 1С: Управление торговлей 11 и Управление торговлей для Беларуси 3, позволяющий: 1) Формировать прайс-лист с фотографиями; 2) Сохранить прайс-лист в Excel с формулами, подсчитывающими количество и сумму заказа; 3) Передать сформированный прайс-лист по каналу ftp на сайт; 4) Сохранить прайс-лист в формате CSV; 5) Загрузить сделанный по прайс-листу заказ обратно в программу.

6000 руб.

04.09.2014    120853    44    105    

53

Merlion Commander Версия 1.3.9.2 - июль 2022 г. (Интеграция с 1С: УT, редакция 11.4, 1С:Розница 2.3,1С:ERP Управление предприятием 2, УТ 10.3, редакция веб-сервиса MERLION API 3.0 от 18.08.2021)

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

Расширении конфигурации "Управление торговлей, редакция 11" для работы с веб-сервисом Мерлион с помощью Merlion API. Расширение и набор подключаемых дополнительных обработок позволяет без изменения конфигурации получить возможность работы с API крупнейшего российского дистрибьютора http://merlion.com. Логика работы максимально приближена к работе веб-сервиса b2b. Вы сможете создать и исправить заказ, зарезервировать товар прямо из 1С, посмотреть актуальные остатки и цены, импортировать штрихкода EAN13 товаров, загружать заказ c автоматическим созданием номенклатуры в 1С и корректности создания. Можно выбирать характеристики по товарным группам и загружать товар с выбранными характеристиками, загружать изображения товара. Не требуется установки дополнительного ПО для работы с веб-сервисом. Кроссплатформенное решение для ОС Windows и Linux. Весь код модулей открыт и доступен для просмотра и внесения изменений.

8280 руб.

02.05.2017    37391    40    45    

47

Sync1C: Синхронизация 1С и OpenCart

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

Внешняя обработка для обмена данными с интернет-магазином OpenCart. Позволяет быстро наполнить магазин товарами, затем обновлять цены и добавлять новые товары. Далее можно средствами OpenCart настраивать и дополнять карточки товаров как надо для магазина, при этом связь товаров с 1С не теряется.

3840 руб.

30.03.2018    41891    77    133    

81
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. sergpn 06.10.21 07:38 Сейчас в теме
Добрый день!
А авторизация запросов есть?
2. kuleshov.x 95 06.10.21 09:24 Сейчас в теме
Описание авторизации securityDefinitions пока не реализовано.
3. Ibrogim 1296 06.10.21 15:47 Сейчас в теме
Классно, однозначно +. были попытки сделать такое без OneScript . грубо говоря можно в случае определённого значения определённого параметра возвращать описание. и тогда можно пробежавшись по всем http сервисам простой обработкой создать yaml для Swagger.
4. JohnyDeath 301 11.10.21 09:25 Сейчас в теме
На самом деле очень часть надо "ссылаться" на одни и те же типы данных в разных функциях.
Например
//    * status - Строка - Статус
//     ~ Подтверждено - Статус "Подтверждено"
//     ~ Отклонено - Статус "Отклонено"

наверняка будет еще где-то использоваться, как и "массив заказов".
В OpenAPI для этого есть блок "definitions", но как это сделать описанием к функциям я не знаю.
Возможно сейчас придут умные люди и расскажут про свои методы описаний сервисов.

Вот подход, где описанием являются общие модули. https://github.com/zerobig/swagger-1c
5. VVi3ard 52 15.10.21 14:13 Сейчас в теме
(4)
В OpenAPI для этого есть блок "definitions", но как это сделать описанием к функциям я не знаю.

Согласен, именно из за использования ссылок лучше пользоваться онлайн инструментами, с удобными конструкторами, например stoplight.io
Описать в них сервис конструктором намного проще чем пытаться это делать в конфигураторе.

Вот только потом проблема в том что полученный yml файл не понятно как использовать для валидации структуры ответа в postman.

postman просит json shema для конкретного метода, и как получить это из общего большого yml не понятно.

Вот интересно есть тут кто то кто использует swagger + json schema для проверки структуры ответа с использованием postman.
6. VVi3ard 52 15.10.21 14:19 Сейчас в теме
(4)
Вот подход, где описанием являются общие модули. https://github.com/zerobig/swagger-1c


Не понимаю зачем это нужно, если хочешь писать почему сразу не писать на yml ?

У автора данной статьи и в проекте на гитхабе вводится третья сущность которая потом транслируется в yml и я не сказал бы что их синтаксис проще и лаконичнее чем исходный yml файл.


На мой взгляд описание сервисов лучше начинать с хорошего конструктора что бы изучить все возможности синтаксиса, а позже уже можно править yml файл руками (так часто быстрее чем в конструкторе).


Я понимаю если бы генерация проводилась автоматически на основании типов (как например для Ruby rswag gem), но какой смысл делать это через промежуточные описания?
7. JohnyDeath 301 15.10.21 14:59 Сейчас в теме
(6)
Не понимаю зачем это нужно, если хочешь писать почему сразу не писать на yml ?

Мне кажется, что прелесть того репозитория в том, что после публикации базы и ее http-сервисов мы сразу имеем онлайн-описание этих сервисов по тому же адресу, где и сама база опубликована. Не надо ничего отдельного держать/генерировать/разворачивать
8. AlexZm 02.02.22 00:23 Сейчас в теме
Добрый день! Добавил в IIS приложение и при проверке запросом http://localhost/onec-swagger-admin/list.os получаю следующую ошибку:
Ошибка HTTP 404.17 — Not Found
Содержимое запроса является сценарием и не будет обрабатываться обработчиком файла статистики.
The requested content appears to be script and will not be served by the static file handler

Подскажите как побороть данную ошибку? Спасибо
Прикрепленные файлы:
Оставьте свое сообщение