Swagger в 1С: от настройки до публикации

02.05.25

Разработка - Инструментарий разработчика

Swagger в 1С: от настройки до публикации. Рабочий инструмент создания и публикации Swagger.json средствами 1С

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Swagger.cfe
.cfe 1,64Mb
1
1 Скачать (1 SM) Купить за 1 850 руб.
1Cv8_demo.cf
.cf 23,17Kb
0
0 Скачать (1 SM) Купить за 1 850 руб.
  •  Что такое swagger и зачем он нужен в 1С

Swagger (ныне OpenAPI) — это набор инструментов для проектирования, документирования и тестирования RESTful API.

 

Зачем Swagger в 1С?

Стандартизация API       – все методы и структуры данных описаны в едином формате.
Удобство тестирования  – можно отправлять запросы прямо из браузера.
Автодокументирование  – не нужно писать документацию вручную.
Упрощение интеграции  – внешние системы могут сразу видеть, как работать с API.


Концепция решения

На решение значительное влияние оказала библиотека swaggo

1. В строго определенном синтаксисе формируем комментарии к обработчикам методов http сервисов.

Для того, чтобы получить типы параметров и результата запроса, комментарии содержат описание данных в формате JSON

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

// @Tags		MDM
// @Summary		MDM (Products GET)
// @Description		MDM (Products GET)
// @Router	/mdm/* [GET]
// @Produce json
// @Accept	json
// @Param		name		query		string		false		"поиск по наименованию"
// <value>
// tele
// </value>
// @Success		200		{array}	array		"ок"
// <value>
// [{"id":1,"name":"Смартфон XYZ","price":599.99},{"id":2,"name":"Ноутбук ABC","price":1299.99}]
// </value>
Функция productsGET(Запрос)  	

	Возврат ОбработчикHTTP.ПолучитьОтвет(Запрос, "GET mdm/products" , "Products.productsGET");

КонецФункции

2. Выгружаем конфигурацию в файлы и преобразовываем комментарии к файлу Swagger.JSON

{
"openapi": "3.0.3",
"info": {
"description": "Products demo API",
"title": "API Server for Products demo",
"version": "1.0"
},
"servers": [
{
"url": "http://host/hs#"
}
],
"paths": {
"/mdm/*": {
"get": {
"parameters": [
{
"description": "поиск по наименованию",
"name": "name",
"in": "query",
....
}

3. Полученный файл публикуем через http сервис (в макете находится готовая react сборка клиента Swagger)

Функция SwagerGET(Запрос)
	
	Ответ = Новый HTTPСервисОтвет(200);
	Ответ.Заголовки.Вставить("Content-Type","text/html; charset=utf-8");
	HTMLSwaggerClient = ПолучитьОбщийМакет("swSwaggerClient").ПолучитьТекст();	
	HTMLSwaggerClient = СтрЗаменить(HTMLSwaggerClient, "#host", ПолучитьБазовыйURL(Запрос.БазовыйURL));  
	Ответ.Заголовки.Вставить("Content-Type","text/html; charset=utf-8");
	Ответ.УстановитьТелоИзСтроки(HTMLSwaggerClient, "UTF-8");   
	Возврат Ответ;

КонецФункции

 

Описание тегов нотаций
 

@Tags        MDM

Определяет группу, в которую входит сервис

 

@Summary     MDM (Products GET)

Наименование сервиса

 

 

@Description        Назначение роли пользователю

 

 

@Router    /mdm/* [GET]
Определяет url и http метод
@Produce  json
@Accept    json

Определяют mame MIME-типы (пока у нас поддерживается только json )

@Param        Input        body        object        true        "Input"

Определяет входящий параметр (их может быть несколько)

  1. Имя - Input       
  2. Размещение - body (возможны следующие значения header - параметр в заголовке, query- параметр в строке например ?pageId=438738746,  body-в теле запроса, path- в url сервиса http:localhost/{region}/work )       
  3. Тип данных - object    (возможны следующие типы number, boolean, object, string, array
  4. Обязательный параметр -  true       
  5. Имя параметра - "Input"

После тега обязательно должно быть определено возможное значение параметра
 

// <value>
// tele
// </value>

@Success        200        {string}    string "ОК"

Определяет "положительный ответ" (тегов может быть несколько но у них должен быть уникальный http код ответа)

  1. Код ответа - 200
  2.  {string}  - тип сваггер
  3. string  - тип системы источника
  4. "ОК" - комментарий

После тега обязательно должно быть определено возможное значение параметра

// <value>
// [{"id":1,"name":"Смартфон XYZ","price":599.99},{"id":2,"name":"Ноутбук ABC","price":1299.99}]
// </value>

@Failure        400        {string}    string "Не верный параметры ответа"

Определяет "отрицательный ответ" (тегов может быть несколько, но у них должен быть уникальный http код ответа)

  1. Код ответа - 400
  2.  {string}  - тип сваггер
  3. string  - тип системы источника
  4. "ОК" - комментарий

После тега обязательно должно быть определено возможное значение параметра
 

<value>  
    "Не заполнено значение строки поиска"
</value>

Обработка "Генерация swagger"

Обработка предназначена для автоматического создания и редактирования нотаций, а также просмотра и формирования файла Swagger.JSON

Инструкция по формированию нотаций

 

 

  1. Выбираем описываемый сервис и метод

 

 

  2. Заполняем параметры запроса



 
В случае некорректного заполнения обработка выведет ошибку

 

Для заполнения значения в редакторе json нужно нажать на кнопку открытия




3. Заполняем результаты запроса 

 

Имеется возможность получить результат запроса непосредственно выполнив запрос по кнопке "Добавить из ответа"

 

Для того, чтобы запрос выполнился, необходимо заполнить параметры соединения по кнопке.

 

 

4.  В случае необходимости, если сервис устанавливает какие-либо параметры в заголовке ответа, есть возможность указать их в соответствующей табличной части.

 

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



 

6. Полученную нотацию вставляем комментарием в код обработчика запроса


 

Инструкция по сборке публикуемого Swagger.json

  1. Выгружаем конфигурацию в файлы.
  2. Запускаем обработку, выбираем путь к каталогу проекта 1с и нажимаем кнопку "Сгенерировать Swagger JSON"

 

 

3. Копируем полученный Swagger.json в макет 

 



 


4. Смотрим полученный результат.

Для просмотра надо открыть опубликованный сервис базы, например: https://server/test/hs/swagger

 

 

Проверено на следующих конфигурациях и релизах:

  • 1С:ERP Управление предприятием 2, релизы 2.5.21.120
  • 1С:Управление холдингом 3.2 (русский и английский интерфейсы), релизы 3.2.10.25

Swagger для Open API Swagger.json

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Платные (руб)

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

15500 руб.

02.09.2020    187140    1044    403    

976

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

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP, УНФ, КА и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы. Может выполнять свертку одновременно в несколько потоков. А так же автоматически, без непосредственного участия пользователя. Решение в Реестре отечественного ПО

8400 руб.

20.08.2024    26260    170    88    

166

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

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

60000 руб.

07.05.2019    35719    70    45    

30

WEB-интеграция Администрирование веб-серверов Платные (руб)

Веб-портал обеспечивает удобный доступ к конфигурации 1С:ITIL(ИТИЛ), 1С:ITILIUM, Управление IT-отделом 8 через интернет с любого устройства посредством браузера, увеличивая эффективность работы пользователей и снижая нагрузку на сервер. Быстрая инсталляция портала за пару часов, удобный и интуитивно понятный интерфейс и безопасность данных помогут упростить работу с порталом и ускорить выполнение бизнес-процессов компании.

128000 руб.

19.12.2023    3669    5    0    

11

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

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

22200 руб.

06.10.2023    20927    55    19    

86

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

Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.

15000 руб.

10.11.2023    14063    60    33    

79

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

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

57600 руб.

26.11.2024    3239    3    3    

5
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. TMV 11 03.05.25 09:19 Сейчас в теме
2. aximo 2319 04.05.25 09:34 Сейчас в теме
Плохо описана цель и начальные условия задачи, но спасибо, что вспомнили swagger
3. van_za 287 04.05.25 10:46 Сейчас в теме
Цель - поднять непосредственно из 1с swagger с описанием ручек

Для этого прилагаются все необходимые инструменты благодаря которым можно за день легко описать все свои ручки и поднять у себя в системе непосредственно из 1с - работающий swagger

Вам не нужно создавать JSON Schema, достаточно в обработке указать пример данных и далее все магически через рефлексию при сборке swagger.json

Также благодаря используемой методе у Вас в конфигураторе будут структурированые комментарии к обработчикам http запросов, одного взгляда на которые достаточно что бы понять что делает ручка

Для того что бы вы не посинели от злости создавая комментарии руками (как в оригинальной библиотеки swaggo и я ей пользовался и там чуть не то что то там не собирается ну полный отстой) прилагается специальная обработка которая позволяет это делать быстро и без ошибок (мы же 1с ники можем легко сделать побыстрому формочку, не то что эти гошники старадают :) (шутка) ), и если мы что то в обработке сделали не так или не доделали обработка по дружески нам поможет указав на ошибку

Отдельный кайф изменить свервис, для этого можно скопировать старый комментарий, вставить его в обработку и она заполнится всеми необходимыми полями

Статья содержит инструкцию, там в принципе все интуитивно понятно, но лучше что бы она была, возможно из за нее статья выглядит громоздкой

Пользоваться одно удовольствие, минимум затрат, тык пык и готово, на уровне мировых стандартов

Надеюсь станет понятнее
d4rkmesa; Трактор; +2 Ответить
4. user2023166 05.05.25 10:20 Сейчас в теме
Пользуюсь этим решением. Результат тот же.
5. van_za 287 05.05.25 11:42 Сейчас в теме
(4)

Из преимуществ у меня уже реализован "Статический swagger.json" В работе

Мой подход не диктует как писать обработчики запросов, просто добавьте правильные комментарии к ним и получите мега фичу
9. koropo 2 05.05.25 22:28 Сейчас в теме
(4) Тоже используем, хорошая штука
6. scipion13 7 05.05.25 13:23 Сейчас в теме
Если говорить о работе со swagger через комментарии, тот это решение выглядит лаконичнее, интуитивно понятнее и функциональнее (работа с Json и XML + удобное преобразование значений в комментарий). Пользуемся им, полёт отличный.
7. van_za 287 05.05.25 14:35 Сейчас в теме
(6)
- Мое решение не требует ничего кроме 1С (и протащить в крупную контору какой то там exe будет проблемой)
- У меня не требуется интуиция, для создания комментариев достаточно внести примеры данных которые должны передаваться и возвращаться
- Используются проверенные временем нотации выработанные в рамках библиотеки swago
- Клиент Swagger доступен непосредственно из 1С
8. scipion13 7 05.05.25 16:22 Сейчас в теме
- Мое решение не требует ничего кроме 1С (и протащить в крупную контору какой то там exe будет проблемой)

Да, крупная компания вряд ли его возьмет. Может это изменится после того как решение добавят в реестр российского ПО.


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

На мой взгляд комментарии этого решения получаются сложно читаемыми и непонятными. Разобраться в этом и поддерживать в будущем - сложно и не удобно.

- Используются проверенные временем нотации выработанные в рамках библиотеки swago

1С-нику в этих нотациях разобраться сложно. Говорю за себя, разумеется.

Клиент Swagger доступен непосредственно из 1С

Так это доступно и в расширении для swagger'а, и в SWEET.

В любом случая я не уменьшаю ваших заслуг, уверен, что решение найдет своего пользователя)
d4rkmesa; van_za; +2 Ответить
Оставьте свое сообщение