├── .github
└── workflows
│ └── deploy-documentation.yml
├── .gitignore
├── LICENSE
├── README.md
├── docs
├── .gitignore
├── README.md
├── docs
│ └── getting-started
│ │ ├── descriptions.md
│ │ ├── index.md
│ │ ├── input_control.md
│ │ ├── methods_func_style.md
│ │ ├── objects_func_style.md
│ │ ├── objects_proc_style.md
│ │ └── static_swagger_json.md
├── docusaurus.config.ts
├── package.json
├── sidebars.ts
├── src
│ ├── css
│ │ └── custom.css
│ └── pages
│ │ └── index.md
├── static
│ ├── .nojekyll
│ ├── img
│ │ ├── description.png
│ │ ├── favicon.ico
│ │ ├── logo.webp
│ │ └── method-name.png
│ ├── rapidoc.png
│ ├── redoc.png
│ ├── scalar.png
│ ├── screenshot_1.png
│ └── stoplight.png
├── tsconfig.json
└── yarn.lock
├── package.json
├── scripts
├── .env
└── ext2cfe.cmd
├── swagger-test
├── CommonModules
│ ├── SwagTest_YAxUnit_Тесты.xml
│ ├── SwagTest_YAxUnit_Тесты
│ │ └── Ext
│ │ │ └── Module.bsl
│ ├── SwagTest_Тестовый_HTTPСервис2Описание.xml
│ ├── SwagTest_Тестовый_HTTPСервис2Описание
│ │ └── Ext
│ │ │ └── Module.bsl
│ ├── SwagTest_Тестовый_HTTPСервис3Описание.xml
│ ├── SwagTest_Тестовый_HTTPСервис3Описание
│ │ └── Ext
│ │ │ └── Module.bsl
│ ├── SwagTest_Тестовый_HTTPСервисОписание.xml
│ ├── SwagTest_Тестовый_HTTPСервисОписание
│ │ └── Ext
│ │ │ └── Module.bsl
│ ├── SwagTest_Тестовый_HTTPСервисСВерсияиОписание.xml
│ ├── SwagTest_Тестовый_HTTPСервисСВерсияиОписание
│ │ └── Ext
│ │ │ └── Module.bsl
│ ├── SwaggerОбщиеНастройки.xml
│ ├── SwaggerОбщиеНастройки
│ │ └── Ext
│ │ │ └── Module.bsl
│ ├── БиллингОписание.xml
│ ├── БиллингОписание
│ │ └── Ext
│ │ │ └── Module.bsl
│ ├── ПередачаДанныхОписание.xml
│ ├── ПередачаДанныхОписание
│ │ └── Ext
│ │ │ └── Module.bsl
│ ├── СерверЛояльностиОписание.xml
│ └── СерверЛояльностиОписание
│ │ └── Ext
│ │ └── Module.bsl
├── Configuration.xml
├── HTTPServices
│ ├── SwagTest_Тестовый_HTTPСервис.xml
│ ├── SwagTest_Тестовый_HTTPСервис
│ │ └── Ext
│ │ │ └── Module.bsl
│ ├── SwagTest_Тестовый_HTTPСервис2.xml
│ ├── SwagTest_Тестовый_HTTPСервис2
│ │ └── Ext
│ │ │ └── Module.bsl
│ ├── SwagTest_Тестовый_HTTPСервис3.xml
│ ├── SwagTest_Тестовый_HTTPСервис3
│ │ └── Ext
│ │ │ └── Module.bsl
│ ├── SwagTest_Тестовый_HTTPСервисСВерсияи.xml
│ └── SwagTest_Тестовый_HTTPСервисСВерсияи
│ │ └── Ext
│ │ └── Module.bsl
└── Languages
│ └── Русский.xml
└── swagger
├── CommonModules
├── Swag_Запросы.xml
├── Swag_Запросы
│ └── Ext
│ │ └── Module.bsl
├── Swag_ОбработкаHTTP.xml
├── Swag_ОбработкаHTTP
│ └── Ext
│ │ └── Module.bsl
├── Swag_Описание.xml
├── Swag_Описание
│ └── Ext
│ │ └── Module.bsl
├── Swag_ФормированиеОписаний.xml
└── Swag_ФормированиеОписаний
│ └── Ext
│ └── Module.bsl
├── CommonTemplates
├── Swag_favicon_16x16_png.xml
├── Swag_favicon_16x16_png
│ └── Ext
│ │ └── Template.bin
├── Swag_favicon_32x32_png.xml
├── Swag_favicon_32x32_png
│ └── Ext
│ │ └── Template.bin
├── Swag_index_html.xml
├── Swag_index_html
│ └── Ext
│ │ └── Template.txt
├── Swag_rapidoc_index_html.xml
├── Swag_rapidoc_index_html
│ └── Ext
│ │ └── Template.txt
├── Swag_rapidoc_min_js.xml
├── Swag_rapidoc_min_js
│ └── Ext
│ │ └── Template.bin
├── Swag_redoc_index_html.xml
├── Swag_redoc_index_html
│ └── Ext
│ │ └── Template.txt
├── Swag_redoc_standalone_js.xml
├── Swag_redoc_standalone_js
│ └── Ext
│ │ └── Template.bin
├── Swag_scalar_api_reference_js.xml
├── Swag_scalar_api_reference_js
│ └── Ext
│ │ └── Template.bin
├── Swag_scalar_index_html.xml
├── Swag_scalar_index_html
│ └── Ext
│ │ └── Template.txt
├── Swag_stoplight_elements_styles_min_css.xml
├── Swag_stoplight_elements_styles_min_css
│ └── Ext
│ │ └── Template.bin
├── Swag_stoplight_elements_web_components_min_js.xml
├── Swag_stoplight_elements_web_components_min_js
│ └── Ext
│ │ └── Template.bin
├── Swag_stoplight_index_html.xml
├── Swag_stoplight_index_html
│ └── Ext
│ │ └── Template.txt
├── Swag_swagger_ui_bundle_js.xml
├── Swag_swagger_ui_bundle_js
│ └── Ext
│ │ └── Template.bin
├── Swag_swagger_ui_css.xml
├── Swag_swagger_ui_css
│ └── Ext
│ │ └── Template.bin
├── Swag_swagger_ui_standalone_preset_js.xml
└── Swag_swagger_ui_standalone_preset_js
│ └── Ext
│ └── Template.bin
├── Configuration.xml
├── DataProcessors
├── Swag_ПроцессорОписанийМетодов.xml
├── Swag_ПроцессорОписанийМетодов
│ └── Ext
│ │ └── ObjectModule.bsl
├── Swag_ПроцессорОписанийОбъектов.xml
└── Swag_ПроцессорОписанийОбъектов
│ └── Ext
│ └── ObjectModule.bsl
├── HTTPServices
├── Swag_Сервис.xml
└── Swag_Сервис
│ └── Ext
│ └── Module.bsl
├── Languages
└── Русский.xml
└── Roles
├── Swag_ОсновнаяРоль.xml
└── Swag_ОсновнаяРоль
└── Ext
└── Rights.xml
/.github/workflows/deploy-documentation.yml:
--------------------------------------------------------------------------------
1 | name: Сборка документации
2 |
3 | on:
4 | push:
5 | branches:
6 | - master
7 | paths:
8 | - 'docs/**'
9 | # Review gh actions docs if you want to further define triggers, paths, etc
10 | # https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#on
11 |
12 | defaults:
13 | run:
14 | working-directory: ./docs
15 |
16 | jobs:
17 | deploy:
18 | name: Сборка документации
19 | runs-on: ubuntu-latest
20 |
21 | steps:
22 | - name: Извлечение исходников
23 | uses: actions/checkout@v4
24 |
25 | - name: Установка NodeJS
26 | uses: actions/setup-node@v4
27 | with:
28 | node-version: 18
29 | cache: yarn
30 | cache-dependency-path: 'docs/yarn.lock'
31 |
32 | - name: Установка зависимостей Docusaurus
33 | run: yarn install --frozen-lockfile
34 |
35 | - name: Сборка сайта с документацией
36 | run: yarn build
37 |
38 | # Popular action to deploy to GitHub Pages:
39 | # Docs: https://github.com/peaceiris/actions-gh-pages#%EF%B8%8F-docusaurus
40 | - name: Публикация на GitHub Pages
41 | uses: peaceiris/actions-gh-pages@v3
42 | with:
43 | github_token: ${{ secrets.GITHUB_TOKEN }}
44 | # Build output to publish to the `gh-pages` branch:
45 | publish_dir: ./docs/build
46 | # The following lines assign commit authorship to the official
47 | # GH-Actions bot for deploys to `gh-pages` branch:
48 | # https://github.com/actions/checkout/issues/13#issuecomment-724415212
49 | # The GH actions bot is used by default if you didn't specify the two fields.
50 | # You can swap them out with your own user credentials.
51 | user_name: github-actions[bot]
52 | user_email: 41898282+github-actions[bot]@users.noreply.github.com
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | *.log
2 | */ConfigDumpInfo.xml
3 |
4 | build/
5 | build
6 |
7 | # compiled output
8 | dist
9 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2020 Ilya Bushin
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Swagger для 1С:Предприятия 8
2 |
3 | [](https://openyellow.org/grid?data=top&repo=304872931)
4 |
5 | Данный продукт предназначен для организации процесса документирования HTTP сервисов конфигураций написанных на платформе 1С:Предприятие.
6 | 
7 |
8 | Кроме swagger-ui для визуализации API могут использоваться следующие решения:
9 |
10 |
11 | ReDoc
12 |
13 |
14 |
15 |
16 | Scalar
17 |
18 |
19 |
20 |
21 | Stoplight
22 |
23 |
24 |
25 |
26 | RapiDoc
27 |
28 |
29 |
30 | Для того чтобы переключиться на желаемую библиотеку в строке запроса надо добавить параметр:
31 | ```
32 | /swagger/index.html?ui=scalar
33 | ```
34 |
35 | ## Состав репозитория
36 |
37 | + swagger - расширение конфигурации реализующее функциональность создания документации
38 | + swagger-test - расширение для тестирования
39 |
40 | ## Порядок установки
41 |
42 | В режиме конфигуратора создать расширение и выполнить загрузку конфигурации из файлов, указав при этом каталог swagger.
43 |
44 | ## Документация
45 |
46 | Документация находится по адресу [https://zerobig.github.io/swagger-1c/](https://zerobig.github.io/swagger-1c/). Наполнение продолжается.
47 |
48 | ## Запуск
49 |
50 | Опубликовать базу 1С:Предприятия на web-сервере. Обязательно проконтролировать, что cтоит настройка публикации "Публиковать HTTP сервисы расширений по умолчанию". Возможно после публикации или изменения настроек публикации потребуется перезапуск web-сервера. Открыть в браузере страницу http://<Адрес_опубликованной_базы_1С_Предприятия>/hs/swagger/index.html
51 |
52 | ## Создание описаний для своих HTTP сервисов
53 |
54 | Поиск описаний происходит среди общих модулей. Наименование общего модуля должно быть построено по шаблону: "<Наименование_HTTP_сервиса>Описание".
55 |
56 | Пример создания описания можно посмотреть:
57 |
58 | + swagger-test\CommonModules\SwagTest_Тестовый_HTTPСервисОписание
59 | + swagger-test\CommonModules\ПередачаДанныхОписание
60 |
61 | ## Проверка входящих (запросов) и исходящих (ответов)
62 |
63 | Реализовано через вызов обёрток "ПроверитьПараметры" и "ПроверитьОтвет" соответственно.
64 |
65 | Для проверки входящих параметров:
66 |
67 | ```BSL
68 | РезультатПроверкиПараметров = Swag_ОбработкаHTTP.ПроверитьПараметры("SwagTest_Тестовый_HTTPСервис", "ТестовыйGET", Запрос);
69 | Если Не ПустаяСтрока(РезультатПроверкиПараметров) Тогда
70 | Возврат Swag_ОбработкаHTTP.ПолучитьОтветОшибки(РезультатПроверкиПараметров, Истина);
71 | КонецЕсли;
72 | ```
73 |
74 | Для проверки ответа:
75 |
76 | ```BSL
77 | Возврат Swag_ОбработкаHTTP.ПроверитьОтвет("SwagTest_Тестовый_HTTPСервис", "ТестовыйGET", Ответ);
78 | ```
79 |
80 | | Функциональность | Статус | Обсуждение |
81 | | ----------------------------------------- |:-------------:| ---------- |
82 | | Наличие описания в запросах | Запланировано | |
83 | | Входящие параметры GET запросов | Запланировано | |
84 | | Входящие параметры POST запросов | Запланировано | |
85 | | Наличие описания в ответах | Реализовано | |
86 | | Наличие и соответствие кода ответа | Реализовано | |
87 | | Наличие и соответствие типа MIME в ответе | Реализовано | |
88 | | Исходящие параметры | Запланировано | |
89 | | Статический swagger.json | В работе | [Ссылка](https://github.com/zerobig/swagger-1c/issues/1) |
90 |
--------------------------------------------------------------------------------
/docs/.gitignore:
--------------------------------------------------------------------------------
1 | # Dependencies
2 | /node_modules
3 |
4 | # Production
5 | /build
6 |
7 | # Generated files
8 | .docusaurus
9 | .cache-loader
10 |
11 | # Misc
12 | .DS_Store
13 | .env.local
14 | .env.development.local
15 | .env.test.local
16 | .env.production.local
17 |
18 | npm-debug.log*
19 | yarn-debug.log*
20 | yarn-error.log*
21 |
--------------------------------------------------------------------------------
/docs/README.md:
--------------------------------------------------------------------------------
1 | # Website
2 |
3 | This website is built using [Docusaurus](https://docusaurus.io/), a modern static website generator.
4 |
5 | ### Installation
6 |
7 | ```
8 | $ yarn
9 | ```
10 |
11 | ### Local Development
12 |
13 | ```
14 | $ yarn start
15 | ```
16 |
17 | This command starts a local development server and opens up a browser window. Most changes are reflected live without having to restart the server.
18 |
19 | ### Build
20 |
21 | ```
22 | $ yarn build
23 | ```
24 |
25 | This command generates static content into the `build` directory and can be served using any static contents hosting service.
26 |
27 | ### Deployment
28 |
29 | Using SSH:
30 |
31 | ```
32 | $ USE_SSH=true yarn deploy
33 | ```
34 |
35 | Not using SSH:
36 |
37 | ```
38 | $ GIT_USER= yarn deploy
39 | ```
40 |
41 | If you are using GitHub pages for hosting, this command is a convenient way to build the website and push to the `gh-pages` branch.
42 |
--------------------------------------------------------------------------------
/docs/docs/getting-started/descriptions.md:
--------------------------------------------------------------------------------
1 | ---
2 | sidebar_position: 0
3 | tags: [Начало]
4 | ---
5 |
6 | # Создание описаний для HTTP сервисов
7 |
8 | Поиск описаний происходит среди общих модулей. Наименование общего модуля должно быть построено по шаблону: "<Наименование_HTTP_сервиса>Описание".
9 |
10 | 
11 |
12 | ## Обязательные функции
13 |
14 | В общем модуле должны быть две экспортные функции. Первая:
15 | ```bsl
16 | Функция ПолучитьОбъектыHTTPСервиса() Экспорт
17 |
18 | Объекты = Новый Массив;
19 |
20 | ...
21 |
22 | Возврат Объекты;
23 |
24 | КонецФункции
25 | ```
26 | для описания объектов принимаемых и возвращаемых HTTP-сервисами. И вторая:
27 | ```bsl
28 | Функция ПолучитьОписаниеHTTPСервиса() Экспорт
29 |
30 | Методы = Новый Массив;
31 |
32 | ...
33 |
34 | Возврат Методы;
35 |
36 | КонецФункции
37 | ```
38 | для, соответственно, описания методов HTTP-сервисов.
39 |
40 | ## Опциональная функция
41 |
42 | :::info
43 |
44 | Данный функционал добавлен в версии 1.2.4.
45 |
46 | :::
47 |
48 | HTTP-сервис можно скрыть из описания:
49 |
50 | ```bsl
51 | Функция ОбщиеНастройки() Экспорт
52 |
53 | Возврат Новый Структура("НеОтображать", Истина);
54 |
55 | КонецФункции
56 | ```
57 |
58 | и задать описание из кода:
59 |
60 | ```bsl
61 | Функция ОбщиеНастройки() Экспорт
62 |
63 | Возврат Новый Структура("Описание", "Пример описания из кода. Пример гиперссылки в описании: example.com");
64 |
65 | КонецФункции
66 | ```
67 |
68 | Если в функции ОбщиеНастройки описание не задано, то оно берётся из комментария HTTP-сервиса
69 |
70 | ## Групповое отключение отображения HTTP-сервисов в описании
71 |
72 | :::info
73 |
74 | Данный функционал добавлен в версии 1.2.6.
75 |
76 | :::
77 |
78 | При формировании описания HTTP-сервисов производится поиск общего модуля ```SwaggerОбщиеНастройки``` и в нём вызывается функция ```ПолучитьОбщиеНастройки```. Функция должна возвращать структуру вида:
79 |
80 | ```bsl
81 | Функция ПолучитьОбщиеНастройки() Экспорт
82 |
83 | МассивНеотображаемыхСервисов= Новый Массив;
84 | МассивНеотображаемыхСервисов.Добавить("Exchange");
85 | МассивНеотображаемыхСервисов.Добавить("ПередачаДанных");
86 | МассивНеотображаемыхСервисов.Добавить("ЭДО");
87 |
88 | Возврат Новый Структура("МассивНеотображаемыхСервисов", МассивНеотображаемыхСервисов);
89 |
90 | КонецФункции
91 | ```
92 |
--------------------------------------------------------------------------------
/docs/docs/getting-started/index.md:
--------------------------------------------------------------------------------
1 | ---
2 | sidebar_label: "Начало работы"
3 | sidebar_position: 0
4 | ---
5 |
6 | # Начало работы
7 |
8 | ## Установка
9 |
10 | Скачать последнюю версию расширения из [releases](https://github.com/zerobig/swagger-1c/releases) и установить в информационную базу.
11 |
12 | ## Публикация
13 |
14 | Опубликовать базу 1С:Предприятия на web-сервере. Обязательно проконтролировать, что cтоит настройка публикации "Публиковать HTTP сервисы расширений по умолчанию". Возможно после публикации или изменения настроек публикации потребуется перезапуск web-сервера.
15 |
16 | ## Запуск
17 |
18 | Открыть в браузере страницу http://≶Адрес_опубликованной_базы_1С_Предприятия>/hs/swagger/index.html
19 |
20 | ## Использование интерфейсов отличных от swagger-ui
21 |
22 | Кроме swagger-ui для визуализации API могут использоваться следующие решения:
23 |
24 | * ReDoc
25 | * Scalar
26 | * Stoplight
27 | * RapiDoc
28 |
29 | Для того чтобы переключиться на желаемую библиотеку в строке запроса надо добавить параметр:
30 | ```
31 | /swagger/index.html?ui=scalar
32 | ```
33 |
--------------------------------------------------------------------------------
/docs/docs/getting-started/input_control.md:
--------------------------------------------------------------------------------
1 | ---
2 | sidebar_position: 5
3 | tags: [Начало]
4 | ---
5 |
6 | # Контроль входящих данных методов
7 |
--------------------------------------------------------------------------------
/docs/docs/getting-started/methods_func_style.md:
--------------------------------------------------------------------------------
1 | ---
2 | sidebar_position: 3
3 | tags: [Начало]
4 | ---
5 |
6 | # Описание HTTP методов
7 |
8 | Пример описания метода в функциональном стиле:
9 |
10 | ```bsl
11 | МассивОписанийМетодов = Swag_Описание
12 | .Метод("ТестовыйGET")
13 | .ОписаниеМетода("Получение данных из 1С")
14 | .ПараметрURL("Версия")
15 | .ОписаниеПараметра("Версия метода")
16 | .ЗначениеПеречисления("1.0")
17 | .ЗначениеПеречисления("2.0")
18 | .Ответ(200)
19 | .ОписаниеОтвета("Success")
20 | .Сформировать()
21 | ;
22 | ```
23 |
24 | ## Наименование метода
25 |
26 | Наименование метода формируется по принципу:
27 |
28 | 
29 |
30 | ## Текстовое описание метода
31 |
32 | ### Основное описание (summary)
33 |
34 | ```bsl
35 | МассивОписанийМетодов = Swag_Описание
36 | .Метод("ТестовыйGET")
37 | .ОписаниеМетода("Получение данных из 1С")
38 | .Сформировать()
39 | ;
40 | ```
41 |
42 | ### Дополнительное описание (description)
43 |
44 | :::info
45 |
46 | Данный функционал добавлен в версии 1.2.4.
47 |
48 | :::
49 |
50 | ```bsl
51 | МассивОписанийМетодов = Swag_Описание
52 | .Метод("ТестовыйGET")
53 | .ДополнительноеОписаниеМетода("В дополнительном описании можно вставлять гиперссылки example.com")
54 | .Сформировать()
55 | ;
56 | ```
57 |
58 | ## Входящие параметры
59 |
60 | Параметры метода можно передать четыремя разными способами:
61 |
62 | ### Параметры URL
63 |
64 | для URL ```/{Версия}/test```
65 | ```http
66 | GET /1.0/test HTTP/1.1
67 | Host: example.com
68 | ```
69 |
70 | ```bsl
71 | МассивОписанийМетодов = Swag_Описание
72 | .Метод("ТестовыйGET")
73 | .ПараметрURL("Версия")
74 | .Сформировать()
75 | ;
76 | ```
77 |
78 | ### Параметры запроса
79 |
80 | ```http
81 | GET /test?version=1.0 HTTP/1.1
82 | Host: example.com
83 | ```
84 |
85 | ```bsl
86 | МассивОписанийМетодов = Swag_Описание
87 | .Метод("ТестовыйGET")
88 | .ПараметрЗапроса("version")
89 | .Сформировать()
90 | ;
91 | ```
92 |
93 | ### Заголовки
94 |
95 | ```http
96 | GET /test HTTP/1.1
97 | Host: example.com
98 | X-Api-Version: 1.0
99 | ```
100 |
101 | ```bsl
102 | МассивОписанийМетодов = Swag_Описание
103 | .Метод("ТестовыйGET")
104 | .ПараметрЗаголовка("X-Api-Version")
105 | .Сформировать()
106 | ;
107 | ```
108 |
109 | ### Форму
110 |
111 | ```http
112 | POST /test HTTP/1.1
113 | Host: example.com
114 | Content-Type: application/x-www-form-urlencoded; charset=utf-8
115 | Content-Length: 11
116 | version=1.0
117 | ```
118 |
119 | ```bsl
120 | МассивОписанийМетодов = Swag_Описание
121 | .Метод("ТестовыйPOST")
122 | .ПараметрФормы("version")
123 | .Сформировать()
124 | ;
125 | ```
126 |
127 | ### Дополнительные описания параметров
128 |
129 | #### Обязательный
130 |
131 | ```bsl
132 | МассивОписанийМетодов = Swag_Описание
133 | .Метод("ТестовыйGET")
134 | .ПараметрЗапроса("version")
135 | // highlight-next-line
136 | .Обязательный()
137 | .Сформировать()
138 | ;
139 | ```
140 |
141 | #### Минимальная и максимальная длина
142 |
143 | :::info
144 |
145 | В swagger-ui информация о длине параметров не отображается. Зато в других интерфейсах (redoc, rapidoc, scalar и stoplight) корректно.
146 |
147 | :::
148 |
149 | ```bsl
150 | МассивОписанийМетодов = Swag_Описание
151 | .Метод("ТестовыйGET")
152 | .ПараметрЗапроса("version")
153 | // highlight-start
154 | .МинимальнаяДлина(10)
155 | .МаксимальнаяДлина(255)
156 | // highlight-end
157 | .Сформировать()
158 | ;
159 | ```
160 |
161 | #### Перечисление
162 |
163 | ```bsl
164 | МассивОписанийМетодов = Swag_Описание
165 | .Метод("ТестовыйGET")
166 | .ПараметрЗапроса("version")
167 | // highlight-start
168 | .ЗначениеПеречисления("1.0")
169 | .ЗначениеПеречисления("2.0")
170 | // highlight-end
171 | .Сформировать()
172 | ;
173 | ```
174 |
175 | ### Передача в запрос тела запроса
176 |
177 | :::info
178 |
179 | Стандарт HTTP никак не регламентирует передачу тела запроса в зависимости от метода. Но скорее всего при методе GET web-сервер проигнорирует переданное тело.
180 |
181 | :::
182 |
183 | ```bsl
184 | МассивОписанийМетодов = Swag_Описание
185 | .Метод("ТестовыйPOST")
186 | .ОписаниеМетода("Отправка данных в 1С")
187 | .Тело()
188 | .ТипТела("application/json")
189 | .СхемаТела("ТестовыйОбъект")
190 | .Сформировать()
191 | ;
192 | ```
193 |
194 | ## Исходящие данные
195 |
196 | Данные возвращаемые HTTP-сервисом формируются из комбинации кода ответа, MIME-типа и описания возвращаемого объекта или массива.
197 |
198 | ```bsl
199 | МассивОписанийМетодов = Swag_Описание
200 | .Метод("ТестовыйGET")
201 | // Код ответа
202 | .Ответ(200)
203 | .ОписаниеОтвета("Success")
204 | // MIME-тип ответа
205 | .ТипОтвета("application/json")
206 | // Схема объекта в ответе
207 | .СхемаОтвета("ТестовыйОбъект")
208 | .Сформировать()
209 | ;
210 | ```
211 |
--------------------------------------------------------------------------------
/docs/docs/getting-started/objects_func_style.md:
--------------------------------------------------------------------------------
1 | ---
2 | sidebar_position: 1
3 | tags: [Начало]
4 | ---
5 |
6 | # Описание объектов
7 |
8 | ## Общий пример
9 |
10 | Методы HTTP-сервисов принимают и/или возвращают объекты или массивы объектов. Каждый объект содержит в себе поля. Описания объектов предназначены для того чтобы зафиксировать в документации состав, типы, описания и другие параметры этих полей.
11 |
12 | В общем случае объект в функциональном стиле можно описать так:
13 |
14 | ```bsl
15 | Объекты = Swag_Описание
16 | .Объект("ОбъектПартнер")
17 | .Свойство("Идентификатор")
18 | .Описание("Идентификатор партнера из 1С")
19 | .ТипЗначения("string")
20 | .Пример("a188a1a4-32fd-4d9e-a54c-89939b7bfdf6")
21 | .Свойство("Наименование")
22 | .ТипЗначения("string")
23 | .Пример("ООО ""СтройТехМонтаж""")
24 | .Свойство("ЭтоПокупатель")
25 | .ТипЗначения("boolean")
26 | .Пример(Истина)
27 | .Свойство("ОсновнойДоговор")
28 | .ТипЗначения("object")
29 | .Схема("ОбъектДоговор")
30 | .Свойство("Адреса")
31 | .ТипЗначения("array")
32 | .Схема("ОбъектАдрес")
33 | //
34 | .Объект("ОбъектДоговор")
35 | .Свойство("Идентификатор")
36 | .Описание("Идентификатор договора из 1С")
37 | .ТипЗначения("string")
38 | .Пример("8f80d9d3-730a-4b8f-82a5-4ff52960691e")
39 | .Свойство("Номер")
40 | .Описание("Номер договора")
41 | .ТипЗначения("string")
42 | .Пример("00УТ-007645")
43 | //
44 | .Объект("ОбъектАдрес")
45 | .Свойство("Адрес")
46 | .Описание("Адрес строкой")
47 | .ТипЗначения("string")
48 | .Пример("Москва, Ленинский проспект, дом 4, строение 1А, квартира 10")
49 | .Сформировать()
50 | ;
51 | ```
52 | результат подобного описания будет такой:
53 | ```json
54 | {
55 | "Идентификатор": "a188a1a4-32fd-4d9e-a54c-89939b7bfdf6",
56 | "Наименование": "ООО \"СтройТехМонтаж\"",
57 | "ЭтоПокупатель": true,
58 | "ОсновнойДоговор": {
59 | "Идентификатор": "8f80d9d3-730a-4b8f-82a5-4ff52960691e",
60 | "Номер": "00УТ-007645"
61 | },
62 | "Адреса": [
63 | {
64 | "Адрес": "Москва, Ленинский проспект, дом 4, строение 1А, квартира 10"
65 | }
66 | ]
67 | }
68 | ```
69 | В данном примере было создано три объекта: ```ОбъектПартнер```, ```ОбъектДоговор``` и ```ОбъектАдрес```. Последние два были использованы при описании объекта ```ОбъектПартнер```.
70 |
71 | ## Другие возможные модификаторы свойств
72 |
73 | ```bsl
74 | Объекты = Swag_Описание
75 | .Объект("ОбъектПартнер")
76 | .Свойство("Наименование")
77 | .ТипЗначения("string")
78 | .Пример("ООО ""СтройТехМонтаж""")
79 | // highlight-start
80 | .МинимальнаяДлина(1)
81 | .МаксимальнаяДлина(255)
82 | // highlight-end
83 | .Свойство("СуммаПродаж")
84 | .ТипЗначения("integer")
85 | .Пример(123.45)
86 | // highlight-start
87 | .Обязательный()
88 | .ФорматЗначения("int64")
89 | .Минимум(10)
90 | .Максимум(1000)
91 | .НеВключаяМинимум()
92 | .НеВключаяМаксимум()
93 | .ПоУмолчанию(20)
94 | // highlight-end
95 | .Сформировать()
96 | ;
97 | ```
98 |
--------------------------------------------------------------------------------
/docs/docs/getting-started/objects_proc_style.md:
--------------------------------------------------------------------------------
1 | ---
2 | sidebar_position: 2
3 | tags: [Начало]
4 | ---
5 |
6 | # Описание объектов (процедурный стиль)
7 |
8 | :::warning
9 |
10 | В версии 1.2.5 был сделан рефакторинг после которого устарела функция ```Swag_ФормированиеОписаний.ОписаниеСвойстваОбъекта```. Вместо неё теперь рекомендуется использовать ```Swag_ФормированиеОписаний.ОписаниеРеквизитаОбъекта```.
11 |
12 | :::
13 |
14 | Тот же пример из предыдущего раздела можно описать в процедурном стиле:
15 |
16 | ```bsl
17 | //
18 | РеквизитИдентификаторПартнера = Swag_ФормированиеОписаний.ОписаниеРеквизитаОбъекта("Идентификатор", "string");
19 | РеквизитИдентификаторПартнера.Описание = "Идентификатор партнера из 1С";
20 | РеквизитИдентификаторПартнера.Пример = "a188a1a4-32fd-4d9e-a54c-89939b7bfdf6";
21 |
22 | РеквизитНаименованиеПартнера = Swag_ФормированиеОписаний.ОписаниеРеквизитаОбъекта("Наименование", "string");
23 | РеквизитНаименованиеПартнера.Пример = "ООО ""СтройТехМонтаж""";
24 |
25 | РеквизитЭтоПокупательПартнера = Swag_ФормированиеОписаний.ОписаниеРеквизитаОбъекта("ЭтоПокупатель", "boolean");
26 | РеквизитЭтоПокупательПартнера.Пример = Истина;
27 |
28 | СвойстваОбъектаПартнер = Новый Массив;
29 | СвойстваОбъектаПартнер.Добавить(РеквизитИдентификаторПартнера);
30 | СвойстваОбъектаПартнер.Добавить(РеквизитНаименованиеПартнера);
31 | СвойстваОбъектаПартнер.Добавить(РеквизитЭтоПокупательПартнера);
32 | СвойстваОбъектаПартнер.Добавить(Swag_ФормированиеОписаний.ОписаниеРеквизитаОбъекта("ОсновнойДоговор", "object", "ОбъектДоговор"));
33 | СвойстваОбъектаПартнер.Добавить(Swag_ФормированиеОписаний.ОписаниеРеквизитаОбъекта("Адреса", "array", "ОбъектАдрес"));
34 |
35 | //
36 | РеквизитИдентификаторДоговора = Swag_ФормированиеОписаний.ОписаниеРеквизитаОбъекта("Идентификатор", "string");
37 | РеквизитИдентификаторДоговора.Описание = "Идентификатор договора из 1С";
38 | РеквизитИдентификаторДоговора.Пример = "8f80d9d3-730a-4b8f-82a5-4ff52960691e";
39 |
40 | РеквизитНомераДоговора = Swag_ФормированиеОписаний.ОписаниеРеквизитаОбъекта("Номер", "string");
41 | РеквизитНомераДоговора.Пример = "00УТ-007645";
42 |
43 | СвойстваОбъектаДоговор = Новый Массив;
44 | СвойстваОбъектаДоговор.Добавить(РеквизитИдентификаторДоговора);
45 | СвойстваОбъектаДоговор.Добавить(РеквизитНомераДоговора);
46 |
47 | //
48 | РеквизитАдреса = Swag_ФормированиеОписаний.ОписаниеРеквизитаОбъекта("Номер", "string");
49 | РеквизитАдреса.Пример = "Москва, Ленинский проспект, дом 4, строение 1А, квартира 10";
50 |
51 | СвойстваОбъектаАдрес = Новый Массив;
52 | СвойстваОбъектаАдрес.Добавить(РеквизитАдреса);
53 |
54 | //
55 | Объекты = Новый Массив;
56 | Объекты.Добавить(Swag_ФормированиеОписаний.ОписаниеОбъекта("ОбъектПартнер", "object", СвойстваОбъектаПартнер));
57 | Объекты.Добавить(Swag_ФормированиеОписаний.ОписаниеОбъекта("ОбъектДоговор", "object", СвойстваОбъектаДоговор));
58 | Объекты.Добавить(Swag_ФормированиеОписаний.ОписаниеОбъекта("ОбъектАдрес", "object", СвойстваОбъектаАдрес));
59 |
60 | Возврат Объекты;
61 | ```
62 |
--------------------------------------------------------------------------------
/docs/docs/getting-started/static_swagger_json.md:
--------------------------------------------------------------------------------
1 | ---
2 | sidebar_position: 10
3 | tags: [Начало]
4 | ---
5 |
6 | # Статический swagger.json
7 |
8 | :::info
9 |
10 | Эта статья о планируемом функционале. В текущей рабочей версии эти функции пока ещё отсутствуют.
11 |
12 | :::
13 |
14 | ## Доводы "за" и "против"
15 |
16 | ### Плюсы
17 |
18 | * Описания объектов и методов находятся в том же модуле что и сам код этих методов - модуле HTTP-сервиса. Не требуется разыскивать отдельные общие модули и переключаться между модулями при описании.
19 | * Описание пишется не кодом, а при помощи комментариев. Так что формировать описание может не программист, а кто-то из команды с меньшей квалификацией.
20 | * Описание формируется не динамически, а берётся из заранее скомпилированного файла. Что снижает время открытия описания (особенно для больших API) и снижает нагрузку на сервер 1С: Предприятия.
21 |
22 | ### Минусы
23 |
24 | * Требуются дополнительные действия чтобы скомпилировать файл описания и поместить его в рабочую базу. Это возможно автоматизировать во время сборки при помощи скриптов.
25 | * Для создания комментариев с описаниями объектов и методов требуется изучить специализированный формат написания таких комментариев. В принципе, он не сильно сложен, но всё равно требует от создателя описаний определённых усилий по соблюдению формата.
26 |
27 | ## Формат описаний объектов и методов
28 |
29 |
30 |
31 | ## Создание (компиляция) файла swagger.json
32 |
33 |
34 | ## Скрипты для автоматизации
35 |
--------------------------------------------------------------------------------
/docs/docusaurus.config.ts:
--------------------------------------------------------------------------------
1 | import {themes as prismThemes} from 'prism-react-renderer';
2 | import type {Config} from '@docusaurus/types';
3 | import type * as Preset from '@docusaurus/preset-classic';
4 |
5 | // This runs in Node.js - Don't use client-side code here (browser APIs, JSX...)
6 |
7 | const config: Config = {
8 | title: 'Swagger для 1С:Предприятия 8',
9 | tagline: 'Dinosaurs are cool',
10 | favicon: 'img/favicon.ico',
11 |
12 | // Set the production url of your site here
13 | url: 'https://zerobig.github.io',
14 | // Set the // pathname under which your site is served
15 | // For GitHub pages deployment, it is often '//'
16 | baseUrl: '/swagger-1c',
17 |
18 | // GitHub pages deployment config.
19 | // If you aren't using GitHub pages, you don't need these.
20 | organizationName: 'zerobig', // Usually your GitHub org/user name.
21 | projectName: 'swagger-1c', // Usually your repo name.
22 |
23 | onBrokenLinks: 'throw',
24 | onBrokenMarkdownLinks: 'warn',
25 |
26 | // Even if you don't use internationalization, you can use this field to set
27 | // useful metadata like html lang. For example, if your site is Chinese, you
28 | // may want to replace "en" with "zh-Hans".
29 | i18n: {
30 | defaultLocale: 'ru',
31 | locales: ['ru'],
32 | },
33 |
34 | presets: [
35 | [
36 | 'classic',
37 | {
38 | docs: {
39 | sidebarPath: './sidebars.ts',
40 | // Please change this to your repo.
41 | // Remove this to remove the "edit this page" links.
42 | editUrl:
43 | 'https://github.com/zerobig/swagger-1c/tree/main/packages/create-docusaurus/templates/shared/',
44 | },
45 | theme: {
46 | customCss: './src/css/custom.css',
47 | },
48 | } satisfies Preset.Options,
49 | ],
50 | ],
51 |
52 | themeConfig: {
53 | // Replace with your project's social card
54 | navbar: {
55 | title: 'Swagger для 1С:Предприятия 8',
56 | logo: {
57 | alt: 'Логотип',
58 | src: 'img/logo.webp',
59 | },
60 | items: [
61 | {
62 | type: 'doc',
63 | docId: 'getting-started/index',
64 | position: 'left',
65 | label: 'Начало работы',
66 | },
67 | {
68 | href: 'https://github.com/zerobig/swagger-1c',
69 | label: 'GitHub',
70 | position: 'right',
71 | },
72 | ],
73 | },
74 | footer: {
75 | style: 'dark',
76 | links: [
77 | {
78 | title: 'Документация',
79 | items: [
80 | {
81 | label: 'Начало',
82 | to: '/docs/getting-started',
83 | },
84 | ],
85 | },
86 | {
87 | title: 'Обратная связь',
88 | items: [
89 | {
90 | label: 'Stack Overflow',
91 | href: 'https://stackoverflow.com/questions/tagged/swagger-1c',
92 | },
93 | {
94 | label: 'GitHub Issues',
95 | href: 'https://github.com/zerobig/swagger-1c/issues',
96 | },
97 | ],
98 | },
99 | {
100 | title: 'Ещё',
101 | items: [
102 | {
103 | label: 'GitHub',
104 | href: 'https://github.com/zerobig/swagger-1c',
105 | },
106 | ],
107 | },
108 | ],
109 | copyright: `Copyright © ${new Date().getFullYear()} Бушин Илья. Built with Docusaurus.`,
110 | },
111 | prism: {
112 | theme: prismThemes.github,
113 | darkTheme: prismThemes.dracula,
114 | additionalLanguages: ['bsl', 'json', 'http'],
115 | },
116 | } satisfies Preset.ThemeConfig,
117 | };
118 |
119 | export default config;
120 |
--------------------------------------------------------------------------------
/docs/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "doc",
3 | "version": "0.0.0",
4 | "private": true,
5 | "scripts": {
6 | "docusaurus": "docusaurus",
7 | "start": "docusaurus start",
8 | "build": "docusaurus build",
9 | "swizzle": "docusaurus swizzle",
10 | "deploy": "docusaurus deploy",
11 | "clear": "docusaurus clear",
12 | "serve": "docusaurus serve",
13 | "write-translations": "docusaurus write-translations",
14 | "write-heading-ids": "docusaurus write-heading-ids",
15 | "typecheck": "tsc"
16 | },
17 | "dependencies": {
18 | "@docusaurus/core": "3.6.1",
19 | "@docusaurus/preset-classic": "3.6.1",
20 | "@mdx-js/react": "^3.0.0",
21 | "clsx": "^2.0.0",
22 | "prism-react-renderer": "^2.3.0",
23 | "react": "^18.0.0",
24 | "react-dom": "^18.0.0"
25 | },
26 | "devDependencies": {
27 | "@docusaurus/module-type-aliases": "3.6.1",
28 | "@docusaurus/tsconfig": "3.6.1",
29 | "@docusaurus/types": "3.6.1",
30 | "typescript": "~5.6.2"
31 | },
32 | "browserslist": {
33 | "production": [
34 | ">0.5%",
35 | "not dead",
36 | "not op_mini all"
37 | ],
38 | "development": [
39 | "last 3 chrome version",
40 | "last 3 firefox version",
41 | "last 5 safari version"
42 | ]
43 | },
44 | "engines": {
45 | "node": ">=18.0"
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/docs/sidebars.ts:
--------------------------------------------------------------------------------
1 | import type {SidebarsConfig} from '@docusaurus/plugin-content-docs';
2 |
3 | // This runs in Node.js - Don't use client-side code here (browser APIs, JSX...)
4 |
5 | /**
6 | * Creating a sidebar enables you to:
7 | - create an ordered group of docs
8 | - render a sidebar for each doc of that group
9 | - provide next/previous navigation
10 |
11 | The sidebars can be generated from the filesystem, or explicitly defined here.
12 |
13 | Create as many sidebars as you want.
14 | */
15 | const sidebars: SidebarsConfig = {
16 | // By default, Docusaurus generates a sidebar from the docs folder structure
17 | tutorialSidebar: [{type: 'autogenerated', dirName: '.'}],
18 |
19 | // But you can create a sidebar manually
20 | /*
21 | tutorialSidebar: [
22 | 'intro',
23 | 'hello',
24 | {
25 | type: 'category',
26 | label: 'Tutorial',
27 | items: ['tutorial-basics/create-a-document'],
28 | },
29 | ],
30 | */
31 | };
32 |
33 | export default sidebars;
34 |
--------------------------------------------------------------------------------
/docs/src/css/custom.css:
--------------------------------------------------------------------------------
1 | /**
2 | * Any CSS included here will be global. The classic template
3 | * bundles Infima by default. Infima is a CSS framework designed to
4 | * work well for content-centric websites.
5 | */
6 |
7 | /* You can override the default Infima variables here. */
8 | :root {
9 | --ifm-color-primary: #2e8555;
10 | --ifm-color-primary-dark: #29784c;
11 | --ifm-color-primary-darker: #277148;
12 | --ifm-color-primary-darkest: #205d3b;
13 | --ifm-color-primary-light: #33925d;
14 | --ifm-color-primary-lighter: #359962;
15 | --ifm-color-primary-lightest: #3cad6e;
16 | --ifm-code-font-size: 95%;
17 | --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.1);
18 | }
19 |
20 | /* For readability concerns, you should choose a lighter palette in dark mode. */
21 | [data-theme='dark'] {
22 | --ifm-color-primary: #25c2a0;
23 | --ifm-color-primary-dark: #21af90;
24 | --ifm-color-primary-darker: #1fa588;
25 | --ifm-color-primary-darkest: #1a8870;
26 | --ifm-color-primary-light: #29d5b0;
27 | --ifm-color-primary-lighter: #32d8b4;
28 | --ifm-color-primary-lightest: #4fddbf;
29 | --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.3);
30 | }
31 |
--------------------------------------------------------------------------------
/docs/src/pages/index.md:
--------------------------------------------------------------------------------
1 | ---
2 | sidebar_position: 0
3 | slug: /
4 | ---
5 |
6 | # Swagger для 1С:Предприятия 8
7 |
8 | Данный продукт предназначен для организации процесса документирования HTTP сервисов конфигураций написанных на платформе 1С:Предприятие.
9 | 
10 |
11 | Кроме swagger-ui для визуализации API могут использоваться следующие решения:
12 |
13 | * ReDoc
14 | * Scalar
15 | * Stoplight
16 | * RapiDoc
17 |
18 | Для того чтобы переключиться на желаемую библиотеку в строке запроса надо добавить параметр:
19 | ```
20 | /swagger/index.html?ui=scalar
21 | ```
22 |
--------------------------------------------------------------------------------
/docs/static/.nojekyll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zerobig/swagger-1c/298469edd4c9dcedbc704e0f252795f91361690c/docs/static/.nojekyll
--------------------------------------------------------------------------------
/docs/static/img/description.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zerobig/swagger-1c/298469edd4c9dcedbc704e0f252795f91361690c/docs/static/img/description.png
--------------------------------------------------------------------------------
/docs/static/img/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zerobig/swagger-1c/298469edd4c9dcedbc704e0f252795f91361690c/docs/static/img/favicon.ico
--------------------------------------------------------------------------------
/docs/static/img/logo.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zerobig/swagger-1c/298469edd4c9dcedbc704e0f252795f91361690c/docs/static/img/logo.webp
--------------------------------------------------------------------------------
/docs/static/img/method-name.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zerobig/swagger-1c/298469edd4c9dcedbc704e0f252795f91361690c/docs/static/img/method-name.png
--------------------------------------------------------------------------------
/docs/static/rapidoc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zerobig/swagger-1c/298469edd4c9dcedbc704e0f252795f91361690c/docs/static/rapidoc.png
--------------------------------------------------------------------------------
/docs/static/redoc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zerobig/swagger-1c/298469edd4c9dcedbc704e0f252795f91361690c/docs/static/redoc.png
--------------------------------------------------------------------------------
/docs/static/scalar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zerobig/swagger-1c/298469edd4c9dcedbc704e0f252795f91361690c/docs/static/scalar.png
--------------------------------------------------------------------------------
/docs/static/screenshot_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zerobig/swagger-1c/298469edd4c9dcedbc704e0f252795f91361690c/docs/static/screenshot_1.png
--------------------------------------------------------------------------------
/docs/static/stoplight.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zerobig/swagger-1c/298469edd4c9dcedbc704e0f252795f91361690c/docs/static/stoplight.png
--------------------------------------------------------------------------------
/docs/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | // This file is not used in compilation. It is here just for a nice editor experience.
3 | "extends": "@docusaurus/tsconfig",
4 | "compilerOptions": {
5 | "baseUrl": "."
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "swagger-1c",
3 | "version": "1.2.6",
4 | "scripts": {
5 | "build": "npm run build:extension && npm run build:test",
6 | "build:extension": "cd scripts && ext2cfe.cmd ../swagger ../dist/swagger.cfe Swagger",
7 | "build:test": "cd scripts && ext2cfe.cmd ../swagger-test ../dist/swagger-test.cfe SwaggerTest"
8 | },
9 | "keywords": [],
10 | "author": "Bushin Ilya",
11 | "license": "MIT"
12 | }
--------------------------------------------------------------------------------
/scripts/.env:
--------------------------------------------------------------------------------
1 | V8_VERSION=8.3.25.1394
--------------------------------------------------------------------------------
/scripts/ext2cfe.cmd:
--------------------------------------------------------------------------------
1 | @rem ----------------------------------------------------------
2 | @rem This Source Code Form is subject to the terms of the
3 | @rem Mozilla Public License, v.2.0. If a copy of the MPL
4 | @rem was not distributed with this file, You can obtain one
5 | @rem at http://mozilla.org/MPL/2.0/.
6 | @rem ----------------------------------------------------------
7 | @rem Codebase: https://github.com/ArKuznetsov/1CFilesConverter/
8 | @rem ----------------------------------------------------------
9 |
10 | @ECHO OFF
11 |
12 | SETLOCAL ENABLEDELAYEDEXPANSION
13 |
14 | IF not defined V8_ENCODING set V8_ENCODING=65001
15 | chcp %V8_ENCODING% > nul
16 |
17 | set CONVERT_VERSION=UNKNOWN
18 | IF exist "%~dp0..\VERSION" FOR /F "usebackq tokens=* delims=" %%i IN ("%~dp0..\VERSION") DO set CONVERT_VERSION=%%i
19 | echo 1C files converter v.%CONVERT_VERSION%
20 | echo ======
21 | echo [INFO] Convert 1C configuration extension to binary format ^(*.cfe^)
22 |
23 | set ERROR_CODE=0
24 |
25 | IF exist "%cd%\.env" IF "%V8_SKIP_ENV%" neq "1" (
26 | FOR /F "usebackq tokens=*" %%a in ("%cd%\.env") DO (
27 | FOR /F "tokens=1* delims==" %%b IN ("%%a") DO (
28 | IF not defined %%b set "%%b=%%c"
29 | )
30 | )
31 | )
32 |
33 | IF not defined V8_VERSION set V8_VERSION=8.3.23.2040
34 | IF not defined V8_TEMP set V8_TEMP=%TEMP%\1c
35 |
36 | echo [INFO] Using 1C:Enterprise, version %V8_VERSION%
37 | echo [INFO] Using temporary folder "%V8_TEMP%"
38 |
39 | IF not "%V8_CONVERT_TOOL%" equ "designer" IF not "%V8_CONVERT_TOOL%" equ "ibcmd" set V8_CONVERT_TOOL=designer
40 | IF not defined V8_TOOL set V8_TOOL="%PROGRAMW6432%\1cv8\%V8_VERSION%\bin\1cv8.exe"
41 | IF "%V8_CONVERT_TOOL%" equ "designer" IF not exist %V8_TOOL% (
42 | echo Could not find 1C:Designer with path %V8_TOOL%
43 | set ERROR_CODE=1
44 | goto finally
45 | )
46 | IF not defined IBCMD_TOOL set IBCMD_TOOL="%PROGRAMW6432%\1cv8\%V8_VERSION%\bin\ibcmd.exe"
47 | IF "%V8_CONVERT_TOOL%" equ "ibcmd" IF not exist %IBCMD_TOOL% (
48 | echo Could not find ibcmd tool with path %IBCMD_TOOL%
49 | set ERROR_CODE=1
50 | goto finally
51 | )
52 |
53 | echo [INFO] Start conversion using "%V8_CONVERT_TOOL%"
54 |
55 | set LOCAL_TEMP=%V8_TEMP%\%~n0
56 | if not defined IBCMD_DATA set IBCMD_DATA=%V8_TEMP%\ibcmd_data
57 | set IB_PATH=%LOCAL_TEMP%\tmp_db
58 | set XML_PATH=%LOCAL_TEMP%\tmp_xml
59 | set WS_PATH=%LOCAL_TEMP%\edt_ws
60 |
61 | set ARG=%1
62 | IF defined ARG set ARG=%ARG:"=%
63 | IF "%ARG%" neq "" set V8_SRC_PATH=%ARG%
64 | set ARG=%2
65 | IF defined ARG set ARG=%ARG:"=%
66 | IF "%ARG%" neq "" set V8_DST_PATH=%ARG%
67 | set V8_DST_FOLDER=%~dp2
68 | set V8_DST_FOLDER=%V8_DST_FOLDER:~0,-1%
69 | set ARG=%3
70 | IF defined ARG set ARG=%ARG:"=%
71 | IF "%ARG%" neq "" set V8_EXT_NAME=%ARG%
72 |
73 | IF not defined V8_SRC_PATH (
74 | echo [ERROR] Missed parameter 1 - "infobase, path to folder contains 1C extension in 1C:Designer XML format or EDT project"
75 | set ERROR_CODE=1
76 | )
77 | IF not defined V8_DST_PATH (
78 | echo [ERROR] Missed parameter 2 - "path to 1C configuration extension file (*.cfe)"
79 | set ERROR_CODE=1
80 | )
81 | IF not defined V8_EXT_NAME (
82 | echo [ERROR] Missed parameter 3 - "configuration extension name"
83 | set ERROR_CODE=1
84 | )
85 | IF %ERROR_CODE% neq 0 (
86 | echo ======
87 | echo [ERROR] Input parameters error. Expected:
88 | echo %%1 - infobase, path to folder contains 1C extension in 1C:Designer XML format or EDT project
89 | echo %%2 - path to 1C configuration extension file ^(*.cfe^)
90 | echo %%3 - configuration extension name
91 | echo.
92 | goto finally
93 | )
94 |
95 | echo [INFO] Clear temporary files...
96 | IF exist "%LOCAL_TEMP%" rd /S /Q "%LOCAL_TEMP%"
97 | md "%LOCAL_TEMP%"
98 | IF not exist "%V8_DST_FOLDER%" md "%V8_DST_FOLDER%"
99 |
100 | echo [INFO] Checking 1C extension source type...
101 |
102 | IF exist "%V8_SRC_PATH%\DT-INF\" (
103 | IF exist "%V8_SRC_PATH%\src\Configuration\Configuration.mdo" (
104 | FOR /F "delims=" %%t IN ('find /i "" "%V8_SRC_PATH%\src\Configuration\Configuration.mdo"') DO (
105 | echo [INFO] Source type: 1C:EDT project
106 | md "%XML_PATH%"
107 | md "%WS_PATH%"
108 | set V8_SRC_TYPE=edt
109 | goto base_ib
110 | )
111 | )
112 | )
113 | IF exist "%V8_SRC_PATH%\Configuration.xml" (
114 | FOR /F "delims=" %%t IN ('find /i "" "%V8_SRC_PATH%\Configuration.xml"') DO (
115 | echo [INFO] Source type: 1C:Designer XML files
116 | set XML_PATH=%V8_SRC_PATH%
117 | set V8_SRC_TYPE=xml
118 | goto base_ib
119 | )
120 | )
121 | set V8_SRC_TYPE=ib
122 | IF /i "%V8_SRC_PATH:~0,2%" equ "/F" (
123 | set IB_PATH=%V8_SRC_PATH:~2%
124 | echo [INFO] Basic config type: File infobase ^(!IB_PATH!^)
125 | set V8_BASE_IB_CONNECTION=File="!IB_PATH!";
126 | goto export_ib
127 | )
128 | IF /i "%V8_SRC_PATH:~0,2%" equ "/S" (
129 | set IB_PATH=%V8_SRC_PATH:~2%
130 | FOR /F "tokens=1,2 delims=\" %%a IN ("!IB_PATH!") DO (
131 | set V8_BASE_IB_SERVER=%%a
132 | set V8_BASE_IB_NAME=%%b
133 | )
134 | set IB_PATH=!V8_BASE_IB_SERVER!\!V8_BASE_IB_NAME!
135 | echo [INFO] Basic config type: Server infobase ^(!V8_BASE_IB_SERVER!\!V8_BASE_IB_NAME!^)
136 | set V8_BASE_IB_CONNECTION=Srvr="!V8_BASE_IB_SERVER!";Ref="!V8_BASE_IB_NAME!";
137 | IF not defined V8_DB_SRV_DBMS set V8_DB_SRV_DBMS=MSSQLServer
138 | goto export_ib
139 | )
140 | IF exist "%V8_SRC_PATH%\1cv8.1cd" (
141 | set IB_PATH=%V8_SRC_PATH%
142 | echo [INFO] Basic config type: File infobase ^(!V8_SRC_PATH!^)
143 | set V8_BASE_IB_CONNECTION=File="!IB_PATH!";
144 | goto export_ib
145 | )
146 |
147 | echo [ERROR] Wrong path "%V8_SRC_PATH%"!
148 | echo Infobase or folder containing configuration extension in 1C:Designer XML format or 1C:EDT project expected.
149 | set ERROR_CODE=1
150 | goto finally
151 |
152 | :base_ib
153 |
154 | echo [INFO] Set basic infobase for export configuration extension...
155 |
156 | IF "%V8_BASE_IB%" equ "" (
157 | md "%IB_PATH%"
158 | echo [INFO] Using temporary file infobase "%IB_PATH%"...
159 | set V8_BASE_IB_CONNECTION=File="%IB_PATH%";
160 | set V8_DESIGNER_LOG=%LOCAL_TEMP%\v8_designer_output.log
161 | %V8_TOOL% CREATEINFOBASE !V8_BASE_IB_CONNECTION! /DisableStartupDialogs /Out "!V8_DESIGNER_LOG!"
162 | FOR /F "tokens=* delims=" %%i IN (!V8_DESIGNER_LOG!) DO IF "%%i" neq "" echo [WARN] %%i
163 | goto prepare_ib
164 | )
165 | IF /i "%V8_BASE_IB:~0,2%" equ "/F" (
166 | set IB_PATH=%V8_BASE_IB:~2%
167 | echo [INFO] Basic infobase type: File infobase ^(!IB_PATH!^)
168 | set V8_BASE_IB_CONNECTION=File="!IB_PATH!";
169 | goto prepare_ib
170 | )
171 | IF /i "%V8_BASE_IB:~0,2%" equ "/S" (
172 | set IB_PATH=%V8_BASE_IB:~2%
173 | FOR /F "tokens=1,2 delims=\" %%a IN ("!IB_PATH!") DO (
174 | set V8_BASE_IB_SERVER=%%a
175 | set V8_BASE_IB_NAME=%%b
176 | )
177 | set IB_PATH=!V8_BASE_IB_SERVER!\!V8_BASE_IB_NAME!
178 | echo [INFO] Basic infobase type: Server infobase ^(!V8_BASE_IB_SERVER!\!V8_BASE_IB_NAME!^)
179 | set V8_BASE_IB_CONNECTION=Srvr="!V8_BASE_IB_SERVER!";Ref="!V8_BASE_IB_NAME!";
180 | IF not defined V8_DB_SRV_DBMS set V8_DB_SRV_DBMS=MSSQLServer
181 | goto prepare_ib
182 | )
183 | IF exist "%V8_BASE_IB%\1cv8.1cd" (
184 | set IB_PATH=%V8_BASE_IB%
185 | echo [INFO] Basic infobase type: File infobase ^(!V8_SRC_PATH!^)
186 | set V8_BASE_IB_CONNECTION=File="!IB_PATH!";
187 | goto prepare_ib
188 | )
189 |
190 | :prepare_ib
191 |
192 | IF defined V8_BASE_IB (
193 | set V8_BASE_IB=%V8_BASE_IB:"=%
194 | ) ELSE (
195 | echo [INFO] Environment variable "V8_BASE_IB" is not defined, temporary file infobase will be used.
196 | set V8_BASE_IB=
197 | )
198 | IF defined V8_BASE_CONFIG (
199 | set V8_BASE_CONFIG=%V8_BASE_CONFIG:"=%
200 | ) ELSE (
201 | echo [INFO] Environment variable "V8_BASE_CONFIG" is not defined, empty configuration will be used.
202 | goto export
203 | )
204 |
205 | IF not exist "%IB_PATH%" md "%IB_PATH%"
206 | call %~dp0conf2ib.cmd "%V8_BASE_CONFIG%" "%IB_PATH%"
207 | IF ERRORLEVEL 0 goto export
208 |
209 | echo [ERROR] Error cheking type of basic configuration "%V8_BASE_CONFIG%"!
210 | echo File or server infobase, configuration file ^(*.cf^), 1C:Designer XML, 1C:EDT project or no configuration expected.
211 | set ERROR_CODE=1
212 | goto finally
213 |
214 | :export
215 | if "%V8_SRC_TYPE%" equ "xml" (
216 | goto load_xml
217 | )
218 | if "%V8_SRC_TYPE%" equ "edt" (
219 | goto export_edt
220 | )
221 |
222 | :export_edt
223 |
224 | echo [INFO] Export configuration extension from 1C:EDT format "%V8_SRC_PATH%" to 1C:Designer XML format "%XML_PATH%"...
225 | IF not defined RING_TOOL (
226 | FOR /F "usebackq tokens=1 delims=" %%i IN (`where ring`) DO (
227 | set RING_TOOL="%%i"
228 | )
229 | )
230 | IF not defined EDTCLI_TOOL (
231 | IF defined V8_EDT_VERSION (
232 | IF %V8_EDT_VERSION:~0,4% lss 2024 goto checktool
233 | set EDT_MASK="%PROGRAMW6432%\1C\1CE\components\1c-edt-%V8_EDT_VERSION%*"
234 | ) ELSE (
235 | set EDT_MASK="%PROGRAMW6432%\1C\1CE\components\1c-edt-*"
236 | )
237 | FOR /F "tokens=*" %%d IN ('"dir /B /S !EDT_MASK! | findstr /r /i ".*1c-edt-[0-9]*\.[0-9]*\.[0-9].*""') DO (
238 | IF exist "%%d\1cedtcli.exe" set EDTCLI_TOOL="%%d\1cedtcli.exe"
239 | )
240 | )
241 |
242 | :checktool
243 |
244 | IF not defined RING_TOOL IF not defined EDTCLI_TOOL (
245 | echo [ERROR] Can't find "ring" or "edtcli" tool. Add path to "ring.bat" to "PATH" environment variable, or set "RING_TOOL" variable with full specified path to "ring.bat", or set "EDTCLI_TOOL" variable with full specified path to "1cedtcli.exe".
246 | set ERROR_CODE=1
247 | goto finally
248 | )
249 | IF defined EDTCLI_TOOL (
250 | echo [INFO] Start conversion using "edt cli"
251 | call %EDTCLI_TOOL% -data "%WS_PATH%" -command export --project "%V8_SRC_PATH%" --configuration-files "%XML_PATH%"
252 | ) ELSE (
253 | echo [INFO] Start conversion using "ring"
254 | call %RING_TOOL% edt@%V8_EDT_VERSION% workspace export --project "%V8_SRC_PATH%" --configuration-files "%XML_PATH%" --workspace-location "%WS_PATH%"
255 | )
256 | IF not ERRORLEVEL 0 (
257 | set ERROR_CODE=%ERRORLEVEL%
258 | goto finally
259 | )
260 |
261 | :load_xml
262 |
263 | echo [INFO] Loading configuration extension from XML-files "%XML_PATH%" to infobase "%IB_PATH%"...
264 | IF "%V8_CONVERT_TOOL%" equ "designer" (
265 | set V8_DESIGNER_LOG=%LOCAL_TEMP%\v8_designer_output.log
266 | %V8_TOOL% DESIGNER /IBConnectionString %V8_BASE_IB_CONNECTION% /N"%V8_IB_USER%" /P"%V8_IB_PWD%" /DisableStartupDialogs /Out "!V8_DESIGNER_LOG!" /LoadConfigFromFiles "%XML_PATH%" -Extension %V8_EXT_NAME%
267 | FOR /F "tokens=* delims=" %%i IN (!V8_DESIGNER_LOG!) DO IF "%%i" neq "" echo [WARN] %%i
268 | ) ELSE (
269 | IF defined V8_BASE_IB_SERVER (
270 | %IBCMD_TOOL% infobase config import --data="%IBCMD_DATA%" --dbms=%V8_DB_SRV_DBMS% --db-server=%V8_BASE_IB_SERVER% --db-name="%V8_BASE_IB_NAME%" --db-user="%V8_DB_SRV_USR%" --db-pwd="%V8_DB_SRV_PWD%" --user="%V8_IB_USER%" --password="%V8_IB_PWD%" --extension=%V8_EXT_NAME% "%XML_PATH%"
271 | ) ELSE (
272 | %IBCMD_TOOL% infobase config import --data="%IBCMD_DATA%" --db-path="%IB_PATH%" --user="%V8_IB_USER%" --password="%V8_IB_PWD%" --extension=%V8_EXT_NAME% "%XML_PATH%"
273 | )
274 | )
275 | IF not ERRORLEVEL 0 (
276 | set ERROR_CODE=%ERRORLEVEL%
277 | goto finally
278 | )
279 |
280 | :export_ib
281 |
282 | echo [INFO] Export configuration extension from infobase "%IB_PATH%" configuration to "%V8_DST_PATH%"...
283 | IF "%V8_CONVERT_TOOL%" equ "designer" (
284 | set V8_DESIGNER_LOG=%LOCAL_TEMP%\v8_designer_output.log
285 | %V8_TOOL% DESIGNER /IBConnectionString %V8_BASE_IB_CONNECTION% /N"%V8_IB_USER%" /P"%V8_IB_PWD%" /DisableStartupDialogs /Out "!V8_DESIGNER_LOG!" /DumpCfg "%V8_DST_PATH%" -Extension %V8_EXT_NAME%
286 | FOR /F "tokens=* delims=" %%i IN (!V8_DESIGNER_LOG!) DO IF "%%i" neq "" echo [WARN] %%i
287 | ) ELSE (
288 | IF defined V8_BASE_IB_SERVER (
289 | %IBCMD_TOOL% infobase config save --data="%IBCMD_DATA%" --dbms=%V8_DB_SRV_DBMS% --db-server=%V8_BASE_IB_SERVER% --db-name="%V8_BASE_IB_NAME%" --db-user="%V8_DB_SRV_USR%" --db-pwd="%V8_DB_SRV_PWD%" --user="%V8_IB_USER%" --password="%V8_IB_PWD%" --extension=%V8_EXT_NAME% "%V8_DST_PATH%"
290 | ) ELSE (
291 | %IBCMD_TOOL% infobase config save --data="%IBCMD_DATA%" --db-path="%IB_PATH%" --user="%V8_IB_USER%" --password="%V8_IB_PWD%" --extension=%V8_EXT_NAME% "%V8_DST_PATH%"
292 | )
293 | )
294 | set ERROR_CODE=%ERRORLEVEL%
295 |
296 | :finally
297 |
298 | echo [INFO] Clear temporary files...
299 | IF exist "%LOCAL_TEMP%" rd /S /Q "%LOCAL_TEMP%"
300 |
301 | exit /b %ERROR_CODE%
302 |
--------------------------------------------------------------------------------
/swagger-test/CommonModules/SwagTest_YAxUnit_Тесты.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SwagTest_YAxUnit_Тесты
6 |
7 |
8 |
9 | Swag test y ax unit тесты
10 |
11 |
12 |
13 | false
14 | false
15 | true
16 | false
17 | false
18 | false
19 | false
20 | DontUse
21 |
22 |
23 |
--------------------------------------------------------------------------------
/swagger-test/CommonModules/SwagTest_YAxUnit_Тесты/Ext/Module.bsl:
--------------------------------------------------------------------------------
1 |
2 | #Область ОбъявлениеТестов
3 |
4 | Процедура ИсполняемыеСценарии() Экспорт
5 |
6 | ЮТТесты
7 | .ДобавитьТестовыйНабор("Swagger: Базовые")
8 | .ДобавитьТест("ПолучитьSwaggerФайл")
9 | .ДобавитьТестовыйНабор("Swagger: функциональное описание объекты")
10 | .ДобавитьТест("СоздатьОбъектБезСвойств")
11 | .ДобавитьТест("СоздатьСвойствоОбъекта")
12 | .ДобавитьТест("ЗадатьТипСвойстваЧисло")
13 | .ДобавитьТест("ЗадатьТипСвойстваСтрока")
14 | .ДобавитьТест("ЗадатьТипСвойстваМассивБезЗаданияТипаЭлементов")
15 | .ДобавитьТест("ЗадатьТипСвойстваМассивСТипомЭлементов")
16 | .ДобавитьТест("ЗадатьТипСвойстваРекурсивныйМассив")
17 | .ДобавитьТест("ЗадатьПример")
18 | .ДобавитьТест("ЗадатьПеречислениеСтрокой")
19 | .ДобавитьТест("ЗадатьПеречислениеЧислом")
20 | .ДобавитьТест("ЗадатьПеречислениеСтрокойДопускаетсяNull")
21 | .ДобавитьТест("ЗадатьПеречислениеБезТипа")
22 | .ДобавитьТест("ЗадатьПеречислениеБулево")
23 | .ДобавитьТестовыйНабор("Swagger: функциональное описание методы")
24 | .ДобавитьТест("СоздатьМетод")
25 | .ДобавитьТест("СоздатьМетодСОписанием")
26 | .ДобавитьТест("СоздатьМетодСОписанием")
27 | .ДобавитьТестовыйНабор("Swagger: тестовое описание")
28 | .ДобавитьТест("СоздатьМассивОбъектов")
29 | .ДобавитьТест("СоздатьМассивМетодов")
30 | ;
31 |
32 | КонецПроцедуры
33 |
34 | #КонецОбласти
35 |
36 | #Область События
37 |
38 |
39 |
40 | #КонецОбласти
41 |
42 | #Область Тесты
43 |
44 | #Область Базовые
45 |
46 | Процедура ПолучитьSwaggerФайл() Экспорт
47 |
48 | Запрос = ЮТест.Данные().HTTPСервисЗапрос();
49 | Запрос.ПараметрыURL.Вставить("File", "swagger.json");
50 |
51 | Результат = Swag_Запросы.ПолучитьSwaggerFileGET(Запрос);
52 |
53 | ЧтениеJSON = Новый ЧтениеJSON;
54 | ЧтениеJSON.УстановитьСтроку(Результат.ПолучитьТелоКакСтроку());
55 | // Читаю в соответствие т.к. у swagger.json названия полей со слэшами
56 | СоответствиеОтвета = ПрочитатьJSON(ЧтениеJSON, Истина);
57 |
58 | ЮТест.ОжидаетЧто(СоответствиеОтвета)
59 | .ИмеетТип("Соответствие")
60 | ;
61 |
62 | КонецПроцедуры
63 |
64 | #КонецОбласти
65 |
66 | #Область Объекты
67 |
68 | Процедура СоздатьОбъектБезСвойств() Экспорт
69 |
70 | МассивОбъектов = Swag_Описание.Объект("Тестовый объект")
71 | .Сформировать()
72 | ;
73 |
74 | ЮТест.ОжидаетЧто(МассивОбъектов)
75 | .ИмеетТип("Массив")
76 | .ИмеетДлину(1)
77 | .Содержит(ЮТест.Предикат()
78 | .ИмеетТип("Структура")
79 | .Свойство("Имя").Равно("Тестовый объект")
80 | .Свойство("Тип").Равно("object")
81 | )
82 | ;
83 |
84 | КонецПроцедуры
85 |
86 | Процедура СоздатьСвойствоОбъекта() Экспорт
87 |
88 | МассивОбъектов = Swag_Описание.Объект("Тестовый объект")
89 | .Свойство("Тестовое свойство")
90 | .Сформировать()
91 | ;
92 |
93 | ЮТест.ОжидаетЧто(МассивОбъектов)
94 | .ИмеетТип("Массив")
95 | .ИмеетДлину(1)
96 | .Содержит(ЮТест.Предикат()
97 | .ИмеетТип("Структура")
98 | .Свойство("Имя").Равно("Тестовый объект")
99 | .Свойство("Тип").Равно("object")
100 | .Свойство("МассивСвойств")
101 | .ИмеетТип("Массив")
102 | .ИмеетДлину(1)
103 | .Свойство("МассивСвойств[0]")
104 | .ИмеетТип("Структура")
105 | .Свойство("МассивСвойств[0].Имя").Равно("Тестовое свойство")
106 | )
107 | ;
108 |
109 | КонецПроцедуры
110 |
111 | Процедура ЗадатьТипСвойстваЧисло() Экспорт
112 |
113 | МассивОбъектов = Swag_Описание.Объект("Тестовый объект")
114 | .Свойство("Тестовое свойство")
115 | .ТипЗначения("integer")
116 | .Сформировать()
117 | ;
118 |
119 | ЮТест.ОжидаетЧто(МассивОбъектов)
120 | .ИмеетТип("Массив")
121 | .ИмеетДлину(1)
122 | .Содержит(ЮТест.Предикат()
123 | .ИмеетТип("Структура")
124 | .Свойство("Имя").Равно("Тестовый объект")
125 | .Свойство("Тип").Равно("object")
126 | .Свойство("МассивСвойств")
127 | .ИмеетТип("Массив")
128 | .ИмеетДлину(1)
129 | .Свойство("МассивСвойств[0]")
130 | .ИмеетТип("Структура")
131 | .Свойство("МассивСвойств[0].Имя").Равно("Тестовое свойство")
132 | .Свойство("МассивСвойств[0].Тип").Равно("integer")
133 | )
134 | ;
135 |
136 | КонецПроцедуры
137 |
138 | Процедура ЗадатьТипСвойстваСтрока() Экспорт
139 |
140 | МассивОбъектов = Swag_Описание.Объект("Тестовый объект")
141 | .Свойство("Тестовое свойство")
142 | .ТипЗначения("string")
143 | .Сформировать()
144 | ;
145 |
146 | ЮТест.ОжидаетЧто(МассивОбъектов)
147 | .ИмеетТип("Массив")
148 | .ИмеетДлину(1)
149 | .Содержит(ЮТест.Предикат()
150 | .ИмеетТип("Структура")
151 | .Свойство("Имя").Равно("Тестовый объект")
152 | .Свойство("Тип").Равно("object")
153 | .Свойство("МассивСвойств")
154 | .ИмеетТип("Массив")
155 | .ИмеетДлину(1)
156 | .Свойство("МассивСвойств[0]")
157 | .ИмеетТип("Структура")
158 | .Свойство("МассивСвойств[0].Имя").Равно("Тестовое свойство")
159 | .Свойство("МассивСвойств[0].Тип").Равно("string")
160 | )
161 | ;
162 |
163 | КонецПроцедуры
164 |
165 | Процедура ЗадатьТипСвойстваМассивБезЗаданияТипаЭлементов() Экспорт
166 |
167 | МассивОбъектов = Swag_Описание.Объект("Тестовый объект")
168 | .Свойство("Тестовое свойство")
169 | .ТипЗначения("array")
170 | .Сформировать()
171 | ;
172 |
173 | ЮТест.ОжидаетЧто(МассивОбъектов)
174 | .ИмеетТип("Массив")
175 | .ИмеетДлину(1)
176 | .Содержит(ЮТест.Предикат()
177 | .ИмеетТип("Структура")
178 | .Свойство("Имя").Равно("Тестовый объект")
179 | .Свойство("Тип").Равно("object")
180 | .Свойство("МассивСвойств")
181 | .ИмеетТип("Массив")
182 | .ИмеетДлину(1)
183 | .Свойство("МассивСвойств[0]")
184 | .ИмеетТип("Структура")
185 | .Свойство("МассивСвойств[0].Имя").Равно("Тестовое свойство")
186 | .Свойство("МассивСвойств[0].Тип").Равно("array")
187 | )
188 | ;
189 |
190 | КонецПроцедуры
191 |
192 | Процедура ЗадатьТипСвойстваМассивСТипомЭлементов() Экспорт
193 |
194 | МассивОбъектов = Swag_Описание.Объект("Тестовый объект")
195 | .Свойство("Тестовое свойство")
196 | .ТипЗначения("array")
197 | .Схема("Элемент массива")
198 | .Сформировать()
199 | ;
200 |
201 | ЮТест.ОжидаетЧто(МассивОбъектов)
202 | .ИмеетТип("Массив")
203 | .ИмеетДлину(1)
204 | .Содержит(ЮТест.Предикат()
205 | .ИмеетТип("Структура")
206 | .Свойство("Имя").Равно("Тестовый объект")
207 | .Свойство("Тип").Равно("object")
208 | .Свойство("МассивСвойств")
209 | .ИмеетТип("Массив")
210 | .ИмеетДлину(1)
211 | .Свойство("МассивСвойств[0]")
212 | .ИмеетТип("Структура")
213 | .Свойство("МассивСвойств[0].Имя").Равно("Тестовое свойство")
214 | .Свойство("МассивСвойств[0].Тип").Равно("array")
215 | .Свойство("МассивСвойств[0].Схема").Равно("#/components/schemas/Элемент массива")
216 | )
217 | ;
218 |
219 | КонецПроцедуры
220 |
221 | Процедура ЗадатьТипСвойстваРекурсивныйМассив() Экспорт
222 |
223 | МассивОбъектов = Swag_Описание.Объект("Тестовый объект")
224 | .Свойство("Тестовое свойство")
225 | .ТипЗначения("array")
226 | .Схема("Тестовый объект")
227 | .Сформировать()
228 | ;
229 |
230 | ЮТест.ОжидаетЧто(МассивОбъектов)
231 | .ИмеетТип("Массив")
232 | .ИмеетДлину(1)
233 | .Содержит(ЮТест.Предикат()
234 | .ИмеетТип("Структура")
235 | .Свойство("Имя").Равно("Тестовый объект")
236 | .Свойство("Тип").Равно("object")
237 | .Свойство("МассивСвойств")
238 | .ИмеетТип("Массив")
239 | .ИмеетДлину(1)
240 | .Свойство("МассивСвойств[0]")
241 | .ИмеетТип("Структура")
242 | .Свойство("МассивСвойств[0].Имя").Равно("Тестовое свойство")
243 | .Свойство("МассивСвойств[0].Тип").Равно("array")
244 | .Свойство("МассивСвойств[0].Схема").Равно("#/components/schemas/Тестовый объект")
245 | )
246 | ;
247 |
248 | КонецПроцедуры
249 |
250 | Процедура ЗадатьПример() Экспорт
251 |
252 | МассивОбъектов = Swag_Описание.Объект("Тестовый объект")
253 | .Свойство("Тестовое свойство")
254 | .Пример("Тестовый пример")
255 | .Сформировать()
256 | ;
257 |
258 | ЮТест.ОжидаетЧто(МассивОбъектов)
259 | .ИмеетТип("Массив")
260 | .ИмеетДлину(1)
261 | .Содержит(ЮТест.Предикат()
262 | .ИмеетТип("Структура")
263 | .Свойство("Имя").Равно("Тестовый объект")
264 | .Свойство("Тип").Равно("object")
265 | .Свойство("МассивСвойств")
266 | .ИмеетТип("Массив")
267 | .ИмеетДлину(1)
268 | .Свойство("МассивСвойств[0]")
269 | .ИмеетТип("Структура")
270 | .Свойство("МассивСвойств[0].Имя").Равно("Тестовое свойство")
271 | .Свойство("МассивСвойств[0].Пример").Равно("Тестовый пример")
272 | )
273 | ;
274 |
275 | КонецПроцедуры
276 |
277 | Процедура ЗадатьПеречислениеСтрокой() Экспорт
278 |
279 | МассивОбъектов = Swag_Описание.Объект("Тестовый объект")
280 | .Свойство("Тестовое свойство")
281 | .ТипЗначения("string")
282 | .ЗначениеПеречисления("asc")
283 | .ЗначениеПеречисления("desc")
284 | .Сформировать()
285 | ;
286 |
287 |
288 |
289 | КонецПроцедуры
290 |
291 | Процедура ЗадатьПеречислениеЧислом() Экспорт
292 |
293 | МассивОбъектов = Swag_Описание.Объект("Тестовый объект")
294 | .Свойство("Тестовое свойство")
295 | .ТипЗначения("integer")
296 | .ЗначениеПеречисления(10)
297 | .ЗначениеПеречисления(15)
298 | .ЗначениеПеречисления(25)
299 | .ЗначениеПеречисления(50)
300 | .Сформировать()
301 | ;
302 |
303 |
304 |
305 | КонецПроцедуры
306 |
307 | Процедура ЗадатьПеречислениеСтрокойДопускаетсяNull() Экспорт
308 |
309 | МассивОбъектов = Swag_Описание.Объект("Тестовый объект")
310 | .Свойство("Тестовое свойство")
311 | .ТипЗначения("string")
312 | .ДопускаетNull()
313 | .ЗначениеПеречисления("asc")
314 | .ЗначениеПеречисления("desc")
315 | .Сформировать()
316 | ;
317 |
318 |
319 |
320 | КонецПроцедуры
321 |
322 | Процедура ЗадатьПеречислениеБезТипа() Экспорт
323 |
324 | МассивОбъектов = Swag_Описание.Объект("Тестовый объект")
325 | .Свойство("Тестовое свойство")
326 | .ЗначениеПеречисления("asc")
327 | .ЗначениеПеречисления("desc")
328 | .Сформировать()
329 | ;
330 |
331 |
332 |
333 | КонецПроцедуры
334 |
335 | Процедура ЗадатьПеречислениеБулево() Экспорт
336 |
337 | Описание = Swag_Описание.Объект("Тестовый объект")
338 | .Свойство("Тестовое свойство")
339 | .ТипЗначения("boolean")
340 | ;
341 |
342 | ЮТест.ОжидаетЧто(Описание)
343 | .Метод("ЗначениеПеречисления").Параметр("asc")
344 | .ВыбрасываетИсключение("ЗначениеПеречисления: перечисление можно устанавливать только для свойства типов string и integer")
345 | ;
346 |
347 | КонецПроцедуры
348 |
349 | #КонецОбласти
350 |
351 | #Область Методы
352 |
353 | Процедура СоздатьМетод() Экспорт
354 |
355 | МассивМетодов = Swag_Описание.Метод("Тестовый метод")
356 | .Сформировать()
357 | ;
358 |
359 | КонецПроцедуры
360 |
361 | Процедура СоздатьМетодСОписанием() Экспорт
362 |
363 | МассивМетодов = Swag_Описание.Метод("Тестовый метод")
364 | .ОписаниеМетода("Тестовое описание тестового метода")
365 | .Сформировать()
366 | ;
367 |
368 | КонецПроцедуры
369 |
370 | #КонецОбласти
371 |
372 | #Область ТестовоеОписание
373 |
374 | Процедура СоздатьМассивОбъектов() Экспорт
375 |
376 | МассивОбъектов = SwagTest_Тестовый_HTTPСервис3Описание
377 | .ПолучитьОбъектыHTTPСервиса();
378 |
379 | ЮТест.ОжидаетЧто(МассивОбъектов)
380 | .ИмеетТип("Массив")
381 | .ИмеетДлину(3)
382 | ;
383 |
384 | КонецПроцедуры
385 |
386 | Процедура СоздатьМассивМетодов() Экспорт
387 |
388 | МассивМетодов = SwagTest_Тестовый_HTTPСервис3Описание
389 | .ПолучитьОписаниеHTTPСервиса();
390 |
391 | ЮТест.ОжидаетЧто(МассивМетодов)
392 | .ИмеетТип("Массив")
393 | .ИмеетДлину(6)
394 | .Содержит(ЮТест.Предикат()
395 | .ИмеетТип("Структура")
396 | .Свойство("Имя").Равно("ТестовыйGET")
397 | .Свойство("Параметры")
398 | .ИмеетТип("Массив")
399 | .ИмеетДлину(2)
400 | .Свойство("Ответы")
401 | .ИмеетТип("Массив")
402 | .ИмеетДлину(2)
403 | )
404 | .Содержит(ЮТест.Предикат()
405 | .ИмеетТип("Структура")
406 | .Свойство("Имя").Равно("ТестовыйPOST")
407 | .Свойство("ТелоЗапроса")
408 | .ИмеетТип("Структура")
409 | )
410 | .Содержит(ЮТест.Предикат()
411 | .ИмеетТип("Структура")
412 | .Свойство("Имя").Равно("ОшибкаНетОтветовGET")
413 | )
414 | .Содержит(ЮТест.Предикат()
415 | .ИмеетТип("Структура")
416 | .Свойство("Имя").Равно("ОшибкаНетНужногоКодаОтветаGET")
417 | )
418 | .Содержит(ЮТест.Предикат()
419 | .ИмеетТип("Структура")
420 | .Свойство("Имя").Равно("ОшибкаНеЗаданТипMIMEGET")
421 | )
422 | .Содержит(ЮТест.Предикат()
423 | .ИмеетТип("Структура")
424 | .Свойство("Имя").Равно("ОшибкаНекорректныйТипMIMEGET")
425 | )
426 | ;
427 |
428 | КонецПроцедуры
429 |
430 | #КонецОбласти
431 |
432 | #КонецОбласти
433 |
--------------------------------------------------------------------------------
/swagger-test/CommonModules/SwagTest_Тестовый_HTTPСервис2Описание.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SwagTest_Тестовый_HTTPСервис2Описание
6 |
7 |
8 |
9 | Swag test тестовый HTTPСервис2 описание
10 |
11 |
12 | ru
13 | Swag test тестовый HTTPСервис2 описание
14 |
15 |
16 |
17 | false
18 | false
19 | true
20 | false
21 | false
22 | false
23 | false
24 | DontUse
25 |
26 |
27 |
--------------------------------------------------------------------------------
/swagger-test/CommonModules/SwagTest_Тестовый_HTTPСервис2Описание/Ext/Module.bsl:
--------------------------------------------------------------------------------
1 | Функция ПолучитьОписаниеHTTPСервиса() Экспорт
2 |
3 | Объекты = ПолучитьОбъектыHTTPСервиса();
4 |
5 | ТестовыйGET_MIME_Success = Новый Массив;
6 | ТестовыйGET_MIME_Success.Добавить(Swag_ФормированиеОписаний.ОписаниеТипаMIME("application/json", , Объекты[0].Имя));
7 |
8 | ТестовыйGETОтветы = Новый Массив;
9 | ТестовыйGETОтветы.Добавить(Swag_ФормированиеОписаний.ОписаниеОтвета(200, "Success", ТестовыйGET_MIME_Success));
10 | ТестовыйGETОтветы.Добавить(Swag_ФормированиеОписаний.ОписаниеОтвета(401, "Unauthorized"));
11 |
12 | Описание = Новый Массив;
13 | Описание.Добавить(Swag_ФормированиеОписаний.ОписаниеМетода(
14 | "ТестовыйGET", "Получение других каких-то данных из 1С",, ТестовыйGETОтветы));
15 |
16 | Возврат Описание;
17 |
18 | КонецФункции
19 |
20 | Функция ПолучитьОбъектыHTTPСервиса() Экспорт
21 |
22 | РеквизитНаименование = Swag_ФормированиеОписаний.ОписаниеРеквизитаОбъекта("name", "string");
23 | РеквизитНаименование.Пример = "Лист дерева";
24 |
25 | TestObjectМассивСвойств = Новый Массив;
26 | TestObjectМассивСвойств.Добавить(РеквизитНаименование);
27 | TestObjectМассивСвойств.Добавить(Swag_ФормированиеОписаний.ОписаниеРеквизитаОбъекта("children", "array", "TestObject2"));
28 |
29 | Объекты = Новый Массив;
30 | Объекты.Добавить(Swag_ФормированиеОписаний.ОписаниеОбъекта(
31 | "TestObject2", "object", TestObjectМассивСвойств));
32 |
33 | Возврат Объекты;
34 |
35 | КонецФункции
36 |
--------------------------------------------------------------------------------
/swagger-test/CommonModules/SwagTest_Тестовый_HTTPСервис3Описание.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SwagTest_Тестовый_HTTPСервис3Описание
6 |
7 |
8 | ru
9 | Swag test тестовый HTTPСервис3 описание
10 |
11 |
12 |
13 | false
14 | false
15 | true
16 | false
17 | false
18 | false
19 | false
20 | DontUse
21 |
22 |
23 |
--------------------------------------------------------------------------------
/swagger-test/CommonModules/SwagTest_Тестовый_HTTPСервис3Описание/Ext/Module.bsl:
--------------------------------------------------------------------------------
1 | Функция ПолучитьОписаниеHTTPСервиса() Экспорт
2 |
3 | Объекты = ПолучитьОбъектыHTTPСервиса();
4 |
5 | МассивОписанийМетодов = Swag_Описание
6 | .Метод("ТестовыйGET")
7 | .ОписаниеМетода("Получение каких-то данных из 1С")
8 | .ПараметрЗапроса("param1")
9 | .ОписаниеПараметра("Какое-то описание параметра")
10 | .Обязательный()
11 | .ПараметрЗапроса("param2")
12 | .ОписаниеПараметра("Ещё какой-то параметр")
13 | .МинимальнаяДлина(1)
14 | .ПараметрЗапроса("param3")
15 | .ОписаниеПараметра("Параметр для теста перечисления")
16 | .ЗначениеПеречисления(1)
17 | .ЗначениеПеречисления(2)
18 | .Ответ(200)
19 | .ОписаниеОтвета("Success")
20 | .ТипОтвета("application/json")
21 | .СхемаОтвета(Объекты[0].Имя)
22 | .Ответ(401)
23 | .ОписаниеОтвета("Unauthorized")
24 | //
25 | .Метод("ТестовыйPOST")
26 | .ОписаниеМетода("Отправка каких-то данных в 1С")
27 | .Тело()
28 | .ТипТела("application/json")
29 | .СхемаТела(Объекты[2].Имя)
30 | //
31 | .Метод("ОшибкаНетОтветовGET")
32 | .ОписаниеМетода("Тест ошибки когда не заданы описания ответов")
33 | //
34 | .Метод("ОшибкаНетНужногоКодаОтветаGET")
35 | .ОписаниеМетода("Тест ошибки когда не определено описание конкретного кода ответа")
36 | .Ответ(401)
37 | .ОписаниеОтвета("Unauthorized")
38 | //
39 | .Метод("ОшибкаНеЗаданТипMIMEGET")
40 | .ОписаниеМетода("Тест ошибки когда в ответе не задан тип MIME")
41 | .Ответ(200)
42 | .ОписаниеОтвета("Success")
43 | .ТипОтвета("application/json")
44 | //
45 | .Метод("ОшибкаНекорректныйТипMIMEGET")
46 | .ОписаниеМетода("Тест ошибки когда в ответ с некорректным типом MIME")
47 | .Ответ(200)
48 | .ОписаниеОтвета("Success")
49 | .ТипОтвета("application/json")
50 | .Сформировать()
51 | ;
52 |
53 | Возврат МассивОписанийМетодов;
54 |
55 | КонецФункции
56 |
57 | Функция ПолучитьОбъектыHTTPСервиса() Экспорт
58 |
59 | Объекты = Swag_Описание
60 | .Объект("TestObject3")
61 | .ОбязательныеПоля("test_property_1, test_property_2")
62 | .Свойство("test_property_1")
63 | .Описание("Это описание для тестового свойства объекта")
64 | .ТипЗначения("boolean")
65 | .Свойство("test_property_2")
66 | .ТипЗначения("string")
67 | .Пример("ООО ""УУУ""")
68 | .МинимальнаяДлина(1)
69 | .МаксимальнаяДлина(255)
70 | .Свойство("test_property_3")
71 | .ТипЗначения("integer")
72 | .Пример(123.45)
73 | .Обязательный()
74 | .ФорматЗначения("int64")
75 | .Минимум(10)
76 | .Максимум(1000)
77 | .НеВключаяМинимум()
78 | .ПоУмолчанию(20)
79 | .Свойство("test_property_4")
80 | .ТипЗначения("array")
81 | .Схема("AnotherTestObject")
82 | .Свойство("test_property_5")
83 | .ТипЗначения("string")
84 | .ЗначениеПеречисления("asc")
85 | .ЗначениеПеречисления("desc")
86 | .Свойство("test_property_6")
87 | .ТипЗначения("object")
88 | .Схема("AnotherTestObject")
89 | //
90 | .Объект("AnotherTestObject3")
91 | //
92 | .Объект("TestPostObject3")
93 | .Свойство("test_post_property")
94 | .ТипЗначения("string")
95 | .Сформировать()
96 | ;
97 |
98 | Возврат Объекты;
99 |
100 | КонецФункции
101 |
--------------------------------------------------------------------------------
/swagger-test/CommonModules/SwagTest_Тестовый_HTTPСервисОписание.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SwagTest_Тестовый_HTTPСервисОписание
6 |
7 |
8 | ru
9 | Описание тестового HTTP сервиса
10 |
11 |
12 |
13 | false
14 | false
15 | true
16 | false
17 | false
18 | false
19 | false
20 | DontUse
21 |
22 |
23 |
--------------------------------------------------------------------------------
/swagger-test/CommonModules/SwagTest_Тестовый_HTTPСервисОписание/Ext/Module.bsl:
--------------------------------------------------------------------------------
1 | Функция ПолучитьОписаниеHTTPСервиса() Экспорт
2 |
3 | Объекты = ПолучитьОбъектыHTTPСервиса();
4 |
5 | ТестовыйGETПараметры = Новый Массив;
6 | ТестовыйGETПараметры.Добавить(Swag_ФормированиеОписаний.ОписаниеПараметра("param1", "Какое-то описание параметра", "query", Истина));
7 | ТестовыйGETПараметры.Добавить(Swag_ФормированиеОписаний.ОписаниеПараметра("param2", "Ещё какой-то параметр", "query", , , , , 1));
8 |
9 | ТестовыйGET_MIME_Success = Новый Массив;
10 | ТестовыйGET_MIME_Success.Добавить(Swag_ФормированиеОписаний.ОписаниеТипаMIME("application/json", , Объекты[0].Имя));
11 |
12 | ТестовыйGETОтветы = Новый Массив;
13 | ТестовыйGETОтветы.Добавить(Swag_ФормированиеОписаний.ОписаниеОтвета(200, "Success", ТестовыйGET_MIME_Success));
14 | ТестовыйGETОтветы.Добавить(Swag_ФормированиеОписаний.ОписаниеОтвета(401, "Unauthorized"));
15 |
16 | ///////////////////////////////////////////////////////////////////////
17 | ТестовыйPOSTТело_MIME = Новый Массив;
18 | ТестовыйPOSTТело_MIME.Добавить(Swag_ФормированиеОписаний.ОписаниеТипаMIME("application/json", , Объекты[2].Имя));
19 |
20 | ТестовыйPOSTТело = Swag_ФормированиеОписаний.ОписаниеТелаЗапроса(, ТестовыйPOSTТело_MIME);
21 |
22 | ///////////////////////////////////////////////////////////////////////
23 | ОшибкаНетНужногоКодаОтветаGETОтветы = Новый Массив;
24 | ОшибкаНетНужногоКодаОтветаGETОтветы.Добавить(Swag_ФормированиеОписаний.ОписаниеОтвета(401, "Unauthorized"));
25 |
26 | ///////////////////////////////////////////////////////////////////////
27 | ОшибкаНеЗаданТипMIMEGET_MIME_Success = Новый Массив;
28 | ОшибкаНеЗаданТипMIMEGET_MIME_Success.Добавить(Swag_ФормированиеОписаний.ОписаниеТипаMIME("application/json"));
29 |
30 | ОшибкаНеЗаданТипMIMEGETОтветы = Новый Массив;
31 | ОшибкаНеЗаданТипMIMEGETОтветы.Добавить(Swag_ФормированиеОписаний.ОписаниеОтвета(200, "Success", ОшибкаНеЗаданТипMIMEGET_MIME_Success));
32 |
33 | ТекстыДляМетодаТестовыйGET = Новый Структура("Описание, ДетальноеОписание",
34 | "Получение каких-то данных из 1С", "Гиперссылка: example.com");
35 |
36 | Описание = Новый Массив;
37 | Описание.Добавить(Swag_ФормированиеОписаний.ОписаниеМетода("ТестовыйGET", ТекстыДляМетодаТестовыйGET, ТестовыйGETПараметры, ТестовыйGETОтветы));
38 | Описание.Добавить(Swag_ФормированиеОписаний.ОписаниеМетода("ТестовыйPOST", "Отправка каких-то данных в 1С", , , ТестовыйPOSTТело));
39 | Описание.Добавить(Swag_ФормированиеОписаний.ОписаниеМетода("ОшибкаНетОтветовGET", "Тест ошибки когда не заданы описания ответов", , Новый Массив));
40 | Описание.Добавить(Swag_ФормированиеОписаний.ОписаниеМетода("ОшибкаНетНужногоКодаОтветаGET", "Тест ошибки когда не определено описание конкретного кода ответа", , ОшибкаНетНужногоКодаОтветаGETОтветы));
41 | Описание.Добавить(Swag_ФормированиеОписаний.ОписаниеМетода("ОшибкаНеЗаданТипMIMEGET", "Тест ошибки когда в ответе не задан тип MIME", , ОшибкаНеЗаданТипMIMEGETОтветы));
42 | Описание.Добавить(Swag_ФормированиеОписаний.ОписаниеМетода("ОшибкаНекорректныйТипMIMEGET", "Тест ошибки когда в ответ с некорректным типом MIME", , ОшибкаНеЗаданТипMIMEGETОтветы));
43 |
44 | Возврат Описание;
45 |
46 | КонецФункции
47 |
48 | Функция ПолучитьОбъектыHTTPСервиса() Экспорт
49 |
50 | Реквизит2 = Swag_ФормированиеОписаний.ОписаниеРеквизитаОбъекта("test_property_2", "string");
51 | Реквизит2.Пример = "ООО ""УУУ""";
52 | Реквизит2.МинимальнаяДлина = 1;
53 | Реквизит2.МаксимальнаяДлина = 255;
54 |
55 | Реквизит3 = Swag_ФормированиеОписаний.ОписаниеРеквизитаОбъекта("test_property_3", "integer");
56 | Реквизит3.Пример = 123.45;
57 | Реквизит3.Обязательный = Истина;
58 | Реквизит3.Формат = "int64";
59 | Реквизит3.Минимум = 10;
60 | Реквизит3.Максимум = 1000;
61 | Реквизит3.НеВключаяМинимум = Истина;
62 | Реквизит3.ПоУмолчанию = 20;
63 |
64 | TestObjectМассивСвойств = Новый Массив;
65 | TestObjectМассивСвойств.Добавить(Swag_ФормированиеОписаний.ОписаниеРеквизитаОбъекта("test_property_1", "boolean"));
66 | TestObjectМассивСвойств.Добавить(Реквизит2);
67 | TestObjectМассивСвойств.Добавить(Реквизит3);
68 | TestObjectМассивСвойств.Добавить(Swag_ФормированиеОписаний.ОписаниеРеквизитаОбъекта("test_property_4", "array", "AnotherTestObject"));
69 | TestObjectМассивСвойств.Добавить(Swag_ФормированиеОписаний.ОписаниеРеквизитаОбъекта("test_property_5", "object", "AnotherTestObject"));
70 |
71 | TestPostObjectМассивСвойств = Новый Массив;
72 | TestPostObjectМассивСвойств.Добавить(Swag_ФормированиеОписаний.ОписаниеРеквизитаОбъекта("test_post_property", "string"));
73 |
74 | Объекты = Новый Массив;
75 | Объекты.Добавить(Swag_ФормированиеОписаний.ОписаниеОбъекта("TestObject", "object", TestObjectМассивСвойств, "test_property_1, test_property_2"));
76 | Объекты.Добавить(Swag_ФормированиеОписаний.ОписаниеОбъекта("AnotherTestObject", "object"));
77 | Объекты.Добавить(Swag_ФормированиеОписаний.ОписаниеОбъекта("TestPostObject", "object", TestPostObjectМассивСвойств));
78 |
79 | Возврат Объекты;
80 |
81 | КонецФункции
82 |
--------------------------------------------------------------------------------
/swagger-test/CommonModules/SwagTest_Тестовый_HTTPСервисСВерсияиОписание.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SwagTest_Тестовый_HTTPСервисСВерсияиОписание
6 |
7 |
8 | ru
9 | Swag test тестовый HTTPСервис с версияи описание
10 |
11 |
12 |
13 | false
14 | false
15 | true
16 | false
17 | false
18 | false
19 | false
20 | DontUse
21 |
22 |
23 |
--------------------------------------------------------------------------------
/swagger-test/CommonModules/SwagTest_Тестовый_HTTPСервисСВерсияиОписание/Ext/Module.bsl:
--------------------------------------------------------------------------------
1 | Функция ПолучитьОписаниеHTTPСервиса() Экспорт
2 |
3 | МассивОписанийМетодов = Swag_Описание
4 | .Метод("ТестовыйGET")
5 | .ОписаниеМетода("Получение данных из 1С")
6 | .ДетальноеОписаниеМетода("Гиперссылка: example.com")
7 | .ПараметрURL("Версия")
8 | .ОписаниеПараметра("Версия метода")
9 | .ЗначениеПеречисления("1.0")
10 | .ЗначениеПеречисления("2.0")
11 | .Ответ(200)
12 | .ОписаниеОтвета("Success")
13 | .Сформировать()
14 | ;
15 |
16 | Возврат МассивОписанийМетодов;
17 |
18 | КонецФункции
19 |
20 | Функция ПолучитьОбъектыHTTPСервиса() Экспорт
21 |
22 | Объекты = Новый Массив;
23 |
24 | Возврат Объекты;
25 |
26 | КонецФункции
27 |
--------------------------------------------------------------------------------
/swagger-test/CommonModules/SwaggerОбщиеНастройки.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SwaggerОбщиеНастройки
6 |
7 |
8 | ru
9 | Swagger общие настройки
10 |
11 |
12 |
13 | false
14 | false
15 | true
16 | false
17 | false
18 | false
19 | false
20 | DontUse
21 |
22 |
23 |
--------------------------------------------------------------------------------
/swagger-test/CommonModules/SwaggerОбщиеНастройки/Ext/Module.bsl:
--------------------------------------------------------------------------------
1 |
2 | Функция ПолучитьОбщиеНастройки() Экспорт
3 |
4 | МассивНеотображаемыхСервисов= Новый Массив;
5 | МассивНеотображаемыхСервисов.Добавить("Exchange");
6 | МассивНеотображаемыхСервисов.Добавить("ПередачаДанных");
7 | МассивНеотображаемыхСервисов.Добавить("ЭДО");
8 |
9 | Возврат Новый Структура("МассивНеотображаемыхСервисов", МассивНеотображаемыхСервисов);
10 |
11 | КонецФункции
--------------------------------------------------------------------------------
/swagger-test/CommonModules/БиллингОписание.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | БиллингОписание
6 |
7 |
8 | ru
9 | Биллинг описание
10 |
11 |
12 |
13 | false
14 | false
15 | true
16 | false
17 | false
18 | false
19 | false
20 | DontUse
21 |
22 |
23 |
--------------------------------------------------------------------------------
/swagger-test/CommonModules/БиллингОписание/Ext/Module.bsl:
--------------------------------------------------------------------------------
1 |
2 | Функция ПолучитьОбщиеНастройки() Экспорт
3 |
4 | Возврат Новый Структура("НеОтображать", Истина);
5 |
6 | КонецФункции
7 |
--------------------------------------------------------------------------------
/swagger-test/CommonModules/ПередачаДанныхОписание.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | ПередачаДанныхОписание
6 |
7 |
8 | ru
9 | Передача данных описание
10 |
11 |
12 |
13 | false
14 | false
15 | true
16 | false
17 | false
18 | false
19 | false
20 | DontUse
21 |
22 |
23 |
--------------------------------------------------------------------------------
/swagger-test/CommonModules/ПередачаДанныхОписание/Ext/Module.bsl:
--------------------------------------------------------------------------------
1 | Функция ПолучитьОписаниеHTTPСервиса() Экспорт
2 |
3 | Описание = Новый Массив;
4 |
5 | // ХранилищеИИдентификаторGET
6 | ХранилищеИИдентификаторGETПараметры = Новый Массив;
7 | ХранилищеИИдентификаторGETПараметры.Добавить(Swag_ФормированиеОписаний.ОписаниеПараметра("Storage", "Наименование логического хранилища", "path", Истина));
8 | ХранилищеИИдентификаторGETПараметры.Добавить(Swag_ФормированиеОписаний.ОписаниеПараметра("ID", "Идентификатор данных в логическом хранилище", "path", Истина));
9 |
10 | ХранилищеИИдентификаторGETОтветы = Новый Массив;
11 | ХранилищеИИдентификаторGETОтветы.Добавить(Swag_ФормированиеОписаний.ОписаниеОтвета(404, "Not found"));
12 |
13 | Описание.Добавить(Swag_ФормированиеОписаний.ОписаниеМетода("ХранилищеИИдентификаторGET", "Получение данных из логического хранилища", ХранилищеИИдентификаторGETПараметры, ХранилищеИИдентификаторGETОтветы));
14 |
15 | // ХранилищеИИдентификаторPOST
16 | ХранилищеИИдентификаторPOSTПараметры = Новый Массив;
17 |
18 |
19 | ХранилищеИИдентификаторPOSTОтветы = Новый Массив;
20 |
21 |
22 | Возврат Описание;
23 |
24 | КонецФункции
--------------------------------------------------------------------------------
/swagger-test/CommonModules/СерверЛояльностиОписание.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | СерверЛояльностиОписание
6 |
7 |
8 | ru
9 | Сервер лояльности описание
10 |
11 |
12 |
13 | false
14 | false
15 | true
16 | false
17 | false
18 | false
19 | false
20 | DontUse
21 |
22 |
23 |
--------------------------------------------------------------------------------
/swagger-test/CommonModules/СерверЛояльностиОписание/Ext/Module.bsl:
--------------------------------------------------------------------------------
1 |
2 | Функция ПолучитьОбщиеНастройки() Экспорт
3 |
4 | Возврат Новый Структура("Описание", "Пример описания HTTP-сервиса ""Сервер лояльности"" из кода. Гиперссылка: example.com");
5 |
6 | КонецФункции
7 |
--------------------------------------------------------------------------------
/swagger-test/Configuration.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | 9cd510cd-abfc-11d4-9434-004095e12fc7
7 | 59b7cfac-930b-4507-8cf8-023d13891801
8 |
9 |
10 | 9fcd25a0-4822-11d4-9414-008048da11f9
11 | 9ce809b4-beaf-40c7-8e23-3b1775d188ce
12 |
13 |
14 | e3687481-0a87-462c-a166-9f34594f9bba
15 | 4985252a-6381-4ecc-a680-733e11e6c195
16 |
17 |
18 | 9de14907-ec23-4a07-96f0-85521cb6b53b
19 | 303fab92-e195-461a-bef6-ed8257d595ba
20 |
21 |
22 | 51f2d5d8-ea4d-4064-8892-82951750031e
23 | 4e4cea44-36b8-485e-907b-130721c7513c
24 |
25 |
26 | e68182ea-4237-4383-967f-90c1e3370bc7
27 | c30cda11-20d6-4e91-9e1b-62a9f2a76520
28 |
29 |
30 | fb282519-d103-4dd3-bc12-cb271d631dfc
31 | 12477032-c0e0-4512-b37a-6b72590ae48f
32 |
33 |
34 |
35 | Adopted
36 | SwaggerTest
37 |
38 |
39 | ru
40 | Swagger test
41 |
42 |
43 |
44 | Customization
45 | true
46 | SwagTest_
47 | Version8_3_10
48 | ManagedApplication
49 |
50 | PlatformApplication
51 |
52 | Russian
53 |
54 | 1.2.6
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 | Русский
63 | SwaggerОбщиеНастройки
64 | SwagTest_YAxUnit_Тесты
65 | SwagTest_Тестовый_HTTPСервис2Описание
66 | SwagTest_Тестовый_HTTPСервис3Описание
67 | SwagTest_Тестовый_HTTPСервисОписание
68 | SwagTest_Тестовый_HTTPСервисСВерсияиОписание
69 | БиллингОписание
70 | ПередачаДанныхОписание
71 | СерверЛояльностиОписание
72 | SwagTest_Тестовый_HTTPСервис
73 | SwagTest_Тестовый_HTTPСервис2
74 | SwagTest_Тестовый_HTTPСервис3
75 | SwagTest_Тестовый_HTTPСервисСВерсияи
76 |
77 |
78 |
--------------------------------------------------------------------------------
/swagger-test/HTTPServices/SwagTest_Тестовый_HTTPСервис.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SwagTest_Тестовый_HTTPСервис
6 |
7 |
8 | ru
9 | Тестовый HTTP сервис
10 |
11 |
12 |
13 | swagger_test
14 | AutoUse
15 | 20
16 |
17 |
18 |
19 |
20 | Тестовый
21 |
22 |
23 | ru
24 | Тестовый
25 |
26 |
27 |
28 | /first
29 |
30 |
31 |
32 |
33 | GET
34 |
35 |
36 | ru
37 | GET
38 |
39 |
40 |
41 | GET
42 | ТестовыйGET
43 |
44 |
45 |
46 |
47 | POST
48 |
49 |
50 | ru
51 | POST
52 |
53 |
54 |
55 | POST
56 | ТестовыйPOST
57 |
58 |
59 |
60 |
61 |
62 |
63 | ОшибкаНетОписания
64 |
65 |
66 | ru
67 | Ошибка нет описания
68 |
69 |
70 |
71 | /error_no_description
72 |
73 |
74 |
75 |
76 | GET
77 |
78 |
79 | ru
80 | GET
81 |
82 |
83 |
84 | GET
85 | ОшибкаНетОписанияGET
86 |
87 |
88 |
89 |
90 |
91 |
92 | ОшибкаНетОтветов
93 |
94 |
95 | ru
96 | Ошибка нет ответов
97 |
98 |
99 |
100 | /error_no_responses
101 |
102 |
103 |
104 |
105 | GET
106 |
107 |
108 | ru
109 | GET
110 |
111 |
112 |
113 | GET
114 | ОшибкаНетОтветовGET
115 |
116 |
117 |
118 |
119 |
120 |
121 | ОшибкаНетНужногоКодаОтвета
122 |
123 |
124 | ru
125 | Ошибка нет нужного кода ответа
126 |
127 |
128 |
129 | /error_no_response_code_200
130 |
131 |
132 |
133 |
134 | GET
135 |
136 |
137 | ru
138 | GET
139 |
140 |
141 |
142 | GET
143 | ОшибкаНетНужногоКодаОтветаGET
144 |
145 |
146 |
147 |
148 |
149 |
150 | ОшибкаНеЗаданТипMIME
151 |
152 |
153 | ru
154 | Ошибка не задан тип MIME
155 |
156 |
157 |
158 | /error_not_set_mime_type
159 |
160 |
161 |
162 |
163 | GET
164 |
165 |
166 | ru
167 | GET
168 |
169 |
170 |
171 | GET
172 | ОшибкаНеЗаданТипMIMEGET
173 |
174 |
175 |
176 |
177 |
178 |
179 | ОшибкаНекорректныйТипMIME
180 |
181 |
182 | ru
183 | Ошибка некорректный тип MIME
184 |
185 |
186 |
187 | /error_incorrect_mime_type
188 |
189 |
190 |
191 |
192 | GET
193 |
194 |
195 | ru
196 | GET
197 |
198 |
199 |
200 | GET
201 | ОшибкаНекорректныйТипMIMEGET
202 |
203 |
204 |
205 |
206 |
207 |
208 |
--------------------------------------------------------------------------------
/swagger-test/HTTPServices/SwagTest_Тестовый_HTTPСервис/Ext/Module.bsl:
--------------------------------------------------------------------------------
1 | // Комментарий к тестовому HTTP сервису.
2 | //
3 | // GET /swagger_test/first
4 | // @summary Получение каких-то данных из 1С
5 | // @description Эти данные предназначены для чего-то большего чем быть просто обычным тестом
6 | // @pathParam {string} param1 - Какое-то описание параметра
7 | // @pathParam {int64} param2 - Ещё какой-то параметр
8 | // @responseContent {TestObject} 200.application/json
9 | // @response 200 - Success
10 | // @response 401 - Unauthorized
11 | //
12 | Функция ТестовыйGET(Запрос)
13 |
14 | РезультатПроверкиПараметров = Swag_ОбработкаHTTP.ПроверитьПараметры("SwagTest_Тестовый_HTTPСервис", "ТестовыйGET", Запрос);
15 | Если Не ПустаяСтрока(РезультатПроверкиПараметров) Тогда
16 | Возврат Swag_ОбработкаHTTP.ПолучитьОтветОшибки(РезультатПроверкиПараметров, Истина);
17 | КонецЕсли;
18 |
19 | Ответ = Новый HTTPСервисОтвет(200);
20 | СтрокаОтвета = "{
21 | | ""param1"": """ + Запрос["ПараметрыЗапроса"].Получить("param1") + """,
22 | | ""param2"": """ + Запрос["ПараметрыЗапроса"].Получить("param2") + """
23 | |}";
24 | Ответ.Заголовки.Вставить("Content-Type", "application/json");
25 | Ответ.УстановитьТелоИзСтроки(СтрокаОтвета, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
26 |
27 | Возврат Swag_ОбработкаHTTP.ПроверитьОтвет("SwagTest_Тестовый_HTTPСервис", "ТестовыйGET", Ответ);
28 |
29 | КонецФункции
30 |
31 | // Комментарий к другому тестовому HTTP сервису.
32 | //
33 | // POST /swagger_test/first
34 | // @summary Отправка каких-то данных в 1С
35 | // @bodyContent {TestPostObject} application/json
36 | //
37 | Функция ТестовыйPOST(Запрос)
38 |
39 | РезультатПроверкиПараметров = Swag_ОбработкаHTTP.ПроверитьПараметры("SwagTest_Тестовый_HTTPСервис", "ТестовыйPOST", Запрос);
40 | Если Не ПустаяСтрока(РезультатПроверкиПараметров) Тогда
41 | Возврат Swag_ОбработкаHTTP.ПолучитьОтветОшибки(РезультатПроверкиПараметров, Истина);
42 | КонецЕсли;
43 |
44 | Ответ = Новый HTTPСервисОтвет(200);
45 | Возврат Ответ;
46 |
47 | КонецФункции
48 |
49 | Функция ОшибкаНетОписанияGET(Запрос)
50 | Ответ = Новый HTTPСервисОтвет(200);
51 | Возврат Swag_ОбработкаHTTP.ПроверитьОтвет("SwagTest_Тестовый_HTTPСервис", "ОшибкаНетОписанияGET", Ответ);
52 | КонецФункции
53 |
54 | Функция ОшибкаНетОтветовGET(Запрос)
55 | Ответ = Новый HTTPСервисОтвет(200);
56 | Возврат Swag_ОбработкаHTTP.ПроверитьОтвет("SwagTest_Тестовый_HTTPСервис", "ОшибкаНетОтветовGET", Ответ);
57 | КонецФункции
58 |
59 | Функция ОшибкаНетНужногоКодаОтветаGET(Запрос)
60 | Ответ = Новый HTTPСервисОтвет(200);
61 | Возврат Swag_ОбработкаHTTP.ПроверитьОтвет("SwagTest_Тестовый_HTTPСервис", "ОшибкаНетНужногоКодаОтветаGET", Ответ);
62 | КонецФункции
63 |
64 | Функция ОшибкаНеЗаданТипMIMEGET(Запрос)
65 | Ответ = Новый HTTPСервисОтвет(200);
66 | Возврат Swag_ОбработкаHTTP.ПроверитьОтвет("SwagTest_Тестовый_HTTPСервис", "ОшибкаНеЗаданТипMIMEGET", Ответ);
67 | КонецФункции
68 |
69 | Функция ОшибкаНекорректныйТипMIMEGET(Запрос)
70 | Ответ = Новый HTTPСервисОтвет(200);
71 | Ответ.Заголовки.Вставить("Content-Type", "text/plain");
72 | Возврат Swag_ОбработкаHTTP.ПроверитьОтвет("SwagTest_Тестовый_HTTPСервис", "ОшибкаНекорректныйТипMIMEGET", Ответ);
73 | КонецФункции
74 |
--------------------------------------------------------------------------------
/swagger-test/HTTPServices/SwagTest_Тестовый_HTTPСервис2.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SwagTest_Тестовый_HTTPСервис2
6 |
7 |
8 |
9 | Swag test тестовый HTTPСервис2
10 |
11 |
12 |
13 | swagger_test2
14 | AutoUse
15 | 20
16 |
17 |
18 |
19 |
20 | Тестовый
21 |
22 |
23 |
24 | Тестовый
25 |
26 |
27 |
28 | /*
29 |
30 |
31 |
32 |
33 | GET
34 |
35 |
36 |
37 | GET
38 |
39 |
40 |
41 | GET
42 | ТестовыйGET
43 |
44 |
45 |
46 |
47 |
48 |
49 |
--------------------------------------------------------------------------------
/swagger-test/HTTPServices/SwagTest_Тестовый_HTTPСервис2/Ext/Module.bsl:
--------------------------------------------------------------------------------
1 |
2 | Функция ТестовыйGET(Запрос)
3 | Ответ = Новый HTTPСервисОтвет(200);
4 | Возврат Ответ;
5 | КонецФункции
6 |
--------------------------------------------------------------------------------
/swagger-test/HTTPServices/SwagTest_Тестовый_HTTPСервис3.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SwagTest_Тестовый_HTTPСервис3
6 |
7 |
8 | ru
9 | Тестовый HTTP сервис 3
10 |
11 |
12 |
13 | swagger_test3
14 | AutoUse
15 | 20
16 |
17 |
18 |
19 |
20 | Тестовый
21 |
22 |
23 | ru
24 | Тестовый
25 |
26 |
27 |
28 | /first
29 |
30 |
31 |
32 |
33 | GET
34 |
35 |
36 | ru
37 | GET
38 |
39 |
40 |
41 | GET
42 | ТестовыйGET
43 |
44 |
45 |
46 |
47 | POST
48 |
49 |
50 | ru
51 | POST
52 |
53 |
54 |
55 | POST
56 | ТестовыйPOST
57 |
58 |
59 |
60 |
61 |
62 |
63 | ОшибкаНетОписания
64 |
65 |
66 | ru
67 | Ошибка нет описания
68 |
69 |
70 |
71 | /error_no_description
72 |
73 |
74 |
75 |
76 | GET
77 |
78 |
79 | ru
80 | GET
81 |
82 |
83 |
84 | GET
85 | ОшибкаНетОписанияGET
86 |
87 |
88 |
89 |
90 |
91 |
92 | ОшибкаНетОтветов
93 |
94 |
95 | ru
96 | Ошибка нет ответов
97 |
98 |
99 |
100 | /error_no_responses
101 |
102 |
103 |
104 |
105 | GET
106 |
107 |
108 | ru
109 | GET
110 |
111 |
112 |
113 | GET
114 | ОшибкаНетОтветовGET
115 |
116 |
117 |
118 |
119 |
120 |
121 | ОшибкаНетНужногоКодаОтвета
122 |
123 |
124 | ru
125 | Ошибка нет нужного кода ответа
126 |
127 |
128 |
129 | /error_no_response_code_200
130 |
131 |
132 |
133 |
134 | GET
135 |
136 |
137 | ru
138 | GET
139 |
140 |
141 |
142 | GET
143 | ОшибкаНетНужногоКодаОтветаGET
144 |
145 |
146 |
147 |
148 |
149 |
150 | ОшибкаНеЗаданТипMIME
151 |
152 |
153 | ru
154 | Ошибка не задан тип MIME
155 |
156 |
157 |
158 | /error_not_set_mime_type
159 |
160 |
161 |
162 |
163 | GET
164 |
165 |
166 | ru
167 | GET
168 |
169 |
170 |
171 | GET
172 | ОшибкаНеЗаданТипMIMEGET
173 |
174 |
175 |
176 |
177 |
178 |
179 | ОшибкаНекорректныйТипMIME
180 |
181 |
182 | ru
183 | Ошибка некорректный тип MIME
184 |
185 |
186 |
187 | /error_incorrect_mime_type
188 |
189 |
190 |
191 |
192 | GET
193 |
194 |
195 | ru
196 | GET
197 |
198 |
199 |
200 | GET
201 | ОшибкаНекорректныйТипMIMEGET
202 |
203 |
204 |
205 |
206 |
207 |
208 |
--------------------------------------------------------------------------------
/swagger-test/HTTPServices/SwagTest_Тестовый_HTTPСервис3/Ext/Module.bsl:
--------------------------------------------------------------------------------
1 | // Комментарий к тестовому HTTP сервису.
2 | //
3 | // GET /swagger_test/first
4 | // @summary Получение каких-то данных из 1С
5 | // @description Эти данные предназначены для чего-то большего чем быть просто обычным тестом
6 | // @pathParam {string} param1 - Какое-то описание параметра
7 | // @pathParam {int64} param2 - Ещё какой-то параметр
8 | // @responseContent {TestObject} 200.application/json
9 | // @response 200 - Success
10 | // @response 401 - Unauthorized
11 | //
12 | Функция ТестовыйGET(Запрос)
13 |
14 | РезультатПроверкиПараметров = Swag_ОбработкаHTTP.ПроверитьПараметры("SwagTest_Тестовый_HTTPСервис", "ТестовыйGET", Запрос);
15 | Если Не ПустаяСтрока(РезультатПроверкиПараметров) Тогда
16 | Возврат Swag_ОбработкаHTTP.ПолучитьОтветОшибки(РезультатПроверкиПараметров, Истина);
17 | КонецЕсли;
18 |
19 | Ответ = Новый HTTPСервисОтвет(200);
20 | СтрокаОтвета = "{
21 | | ""param1"": """ + Запрос["ПараметрыЗапроса"].Получить("param1") + """,
22 | | ""param2"": """ + Запрос["ПараметрыЗапроса"].Получить("param2") + """
23 | |}";
24 | Ответ.Заголовки.Вставить("Content-Type", "application/json");
25 | Ответ.УстановитьТелоИзСтроки(СтрокаОтвета, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
26 |
27 | Возврат Swag_ОбработкаHTTP.ПроверитьОтвет("SwagTest_Тестовый_HTTPСервис", "ТестовыйGET", Ответ);
28 |
29 | КонецФункции
30 |
31 | // Комментарий к другому тестовому HTTP сервису.
32 | //
33 | // POST /swagger_test/first
34 | // @summary Отправка каких-то данных в 1С
35 | // @bodyContent {TestPostObject} application/json
36 | //
37 | Функция ТестовыйPOST(Запрос)
38 |
39 | РезультатПроверкиПараметров = Swag_ОбработкаHTTP.ПроверитьПараметры("SwagTest_Тестовый_HTTPСервис", "ТестовыйPOST", Запрос);
40 | Если Не ПустаяСтрока(РезультатПроверкиПараметров) Тогда
41 | Возврат Swag_ОбработкаHTTP.ПолучитьОтветОшибки(РезультатПроверкиПараметров, Истина);
42 | КонецЕсли;
43 |
44 | Ответ = Новый HTTPСервисОтвет(200);
45 | Возврат Ответ;
46 |
47 | КонецФункции
48 |
49 | Функция ОшибкаНетОписанияGET(Запрос)
50 | Ответ = Новый HTTPСервисОтвет(200);
51 | Возврат Swag_ОбработкаHTTP.ПроверитьОтвет("SwagTest_Тестовый_HTTPСервис", "ОшибкаНетОписанияGET", Ответ);
52 | КонецФункции
53 |
54 | Функция ОшибкаНетОтветовGET(Запрос)
55 | Ответ = Новый HTTPСервисОтвет(200);
56 | Возврат Swag_ОбработкаHTTP.ПроверитьОтвет("SwagTest_Тестовый_HTTPСервис", "ОшибкаНетОтветовGET", Ответ);
57 | КонецФункции
58 |
59 | Функция ОшибкаНетНужногоКодаОтветаGET(Запрос)
60 | Ответ = Новый HTTPСервисОтвет(200);
61 | Возврат Swag_ОбработкаHTTP.ПроверитьОтвет("SwagTest_Тестовый_HTTPСервис", "ОшибкаНетНужногоКодаОтветаGET", Ответ);
62 | КонецФункции
63 |
64 | Функция ОшибкаНеЗаданТипMIMEGET(Запрос)
65 | Ответ = Новый HTTPСервисОтвет(200);
66 | Возврат Swag_ОбработкаHTTP.ПроверитьОтвет("SwagTest_Тестовый_HTTPСервис", "ОшибкаНеЗаданТипMIMEGET", Ответ);
67 | КонецФункции
68 |
69 | Функция ОшибкаНекорректныйТипMIMEGET(Запрос)
70 | Ответ = Новый HTTPСервисОтвет(200);
71 | Ответ.Заголовки.Вставить("Content-Type", "text/plain");
72 | Возврат Swag_ОбработкаHTTP.ПроверитьОтвет("SwagTest_Тестовый_HTTPСервис", "ОшибкаНекорректныйТипMIMEGET", Ответ);
73 | КонецФункции
74 |
--------------------------------------------------------------------------------
/swagger-test/HTTPServices/SwagTest_Тестовый_HTTPСервисСВерсияи.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SwagTest_Тестовый_HTTPСервисСВерсияи
6 |
7 |
8 | ru
9 | Swag test тестовый HTTPСервис с версияи
10 |
11 |
12 | Тестовый HTTPСервис с версияи. Описание взято из комментария
13 | swagger_test_with_versions
14 | AutoUse
15 | 20
16 |
17 |
18 |
19 |
20 | Тестовый
21 |
22 |
23 | ru
24 | Тестовый
25 |
26 |
27 |
28 | /{Версия}/test
29 |
30 |
31 |
32 |
33 | GET
34 |
35 |
36 | ru
37 | GET
38 |
39 |
40 |
41 | GET
42 | ТестовыйGET
43 |
44 |
45 |
46 |
47 |
48 |
49 |
--------------------------------------------------------------------------------
/swagger-test/HTTPServices/SwagTest_Тестовый_HTTPСервисСВерсияи/Ext/Module.bsl:
--------------------------------------------------------------------------------
1 |
2 | Функция ТестовыйGET(Запрос)
3 | Ответ = Новый HTTPСервисОтвет(200);
4 | Возврат Ответ;
5 | КонецФункции
6 |
--------------------------------------------------------------------------------
/swagger-test/Languages/Русский.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Adopted
7 | Русский
8 |
9 | ru
10 |
11 |
12 |
--------------------------------------------------------------------------------
/swagger/CommonModules/Swag_Запросы.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Swag_Запросы
6 |
7 |
8 | ru
9 | Запросы
10 |
11 |
12 |
13 | false
14 | false
15 | true
16 | false
17 | false
18 | false
19 | false
20 | DontUse
21 |
22 |
23 |
--------------------------------------------------------------------------------
/swagger/CommonModules/Swag_ОбработкаHTTP.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Swag_ОбработкаHTTP
6 |
7 |
8 | ru
9 | Обработка HTTP
10 |
11 |
12 |
13 | false
14 | false
15 | true
16 | false
17 | false
18 | false
19 | false
20 | DontUse
21 |
22 |
23 |
--------------------------------------------------------------------------------
/swagger/CommonModules/Swag_ОбработкаHTTP/Ext/Module.bsl:
--------------------------------------------------------------------------------
1 | #Область ПрограммныйИнтерфейс
2 |
3 | // Проверяет входящие параметры HTTP сервиса на соответствие описанию.
4 | //
5 | // Параметры:
6 | // ИмяСервиса - Строка - Наименование HTTP сервиса как оно задано в конфигураторе.
7 | // ИмяМетода - Строка - Имя метода HTTP сервиса.
8 | // Запрос - HTTPСервисЗапрос - Входящий зпрос HTTP сервиса, который будет проверен на соответствие описанию.
9 | // ЗаписыватьОшибкуВЖурналРегистрации - Булево - Способ обработки несоответствий описания и ответа.
10 | // Истина - запись в журнал регистрации,
11 | // Ложь - в ответе будет возвращен JSON с ошибкой.
12 | //
13 | // Возвращаемое значение:
14 | // Строка - Текст несоответствия HTTP запроса и описания HTTP сервиса
15 | //
16 | Функция ПроверитьПараметры(ИмяСервиса, ИмяМетода, Запрос, ЗаписыватьОшибкуВЖурналРегистрации = Истина) Экспорт
17 |
18 | Попытка
19 | МодульОписанияHTTPСервиса = ОбщегоНазначения.ОбщийМодуль(ИмяСервиса + "Описание");
20 | Описание = МодульОписанияHTTPСервиса.ПолучитьОписаниеHTTPСервиса();
21 | Объекты = МодульОписанияHTTPСервиса.ПолучитьОбъектыHTTPСервиса();
22 | Исключение
23 | Возврат "";
24 | КонецПопытки;
25 |
26 | ИмяСобытияЖурналаРегистрации = "Swagger: проверка корректности HTTP запроса";
27 | ТекстМетодСервис = "метода """ + ИмяМетода + """ HTTP сервиса """ + ИмяСервиса + """";
28 |
29 | СообщениеОбОшибке = "";
30 |
31 | ОписаниеМетода = ПолучитьЗначениеОписанияМетода(Описание, ИмяМетода, "Описание");
32 | Если ЗначениеЗаполнено(ОписаниеМетода) Тогда
33 |
34 | ПараметрыМетода = ПолучитьМассивЭлементовОписания(Описание, ИмяМетода, "Параметры");
35 | Если Запрос.ПараметрыЗапроса.Количество() > 0 И ПараметрыМетода.Количество() = 0 Тогда
36 | СообщениеОбОшибке = НСтр("ru = 'Для " + ТекстМетодСервис +
37 | " были переданы параметры хотя в документации какие-либо параметры описаны не были.'");
38 | КонецЕсли;
39 |
40 | Для каждого ПараметрЗапроса Из Запрос.ПараметрыЗапроса Цикл
41 | ПараметрМетода = ПолучитьПараметрМетода(ПараметрыМетода, ПараметрЗапроса.Ключ);
42 | Если ПараметрМетода = Неопределено Тогда
43 | СообщениеОбОшибке = НСтр("ru = 'Для " + ТекстМетодСервис +
44 | " был передан параметр с именем """ + ПараметрЗапроса.Ключ + """ для которого отсутствует описание.'");
45 | КонецЕсли;
46 | Если ПараметрМетода.Устарел Тогда
47 | СообщениеОбОшибке = НСтр("ru = 'Для " + ТекстМетодСервис +
48 | " был передан устаревший параметр с именем """ + ПараметрМетода.Имя + """.'");
49 | КонецЕсли;
50 | КонецЦикла;
51 | Для каждого ПараметрМетода Из ПараметрыМетода Цикл
52 | Если ПараметрМетода.Обязательный И Запрос.ПараметрыЗапроса.Получить(ПараметрМетода.Имя) = Неопределено Тогда
53 | СообщениеОбОшибке = НСтр("ru = 'Для " + ТекстМетодСервис +
54 | " не был передан обязательный параметр с именем """ + ПараметрМетода.Имя + """.'");
55 | КонецЕсли;
56 | КонецЦикла;
57 |
58 | ТелоМетода = ПолучитьЗначениеОписанияМетода(Описание, ИмяМетода, "ТелоЗапроса");
59 | ТелоЗапроса = Запрос.ПолучитьТелоКакСтроку();
60 | Если ТелоМетода = Неопределено Тогда
61 | Если Не ПустаяСтрока(ТелоЗапроса) Тогда
62 | СообщениеОбОшибке = НСтр("ru = 'Для " + ТекстМетодСервис +
63 | " было передано тело запроса для которого отсутствует описание.'");
64 | КонецЕсли;
65 | Иначе
66 | Если ПустаяСтрока(ТелоЗапроса) Тогда
67 | СообщениеОбОшибке = НСтр("ru = 'Для " + ТекстМетодСервис + " не было передано тело запроса.'");
68 | Иначе
69 | // TODO: Пока речь идёт только о JSON. Нужно проработать другие возможные варианты.
70 | СхемаТелаПоMIME = ПолучитьОписаниеТела(ТелоМетода, "application/json");
71 | Если Не СхемаТелаПоMIME = Неопределено Тогда
72 |
73 | ОбъектТела = ПолучитьОбъектПоИмениСхемы(Объекты, СхемаТелаПоMIME);
74 | Если Не ОбъектТела = Неопределено Тогда
75 |
76 | ЧтениеJSON = Новый ЧтениеJSON;
77 | ЧтениеJSON.УстановитьСтроку(ТелоЗапроса);
78 |
79 | Попытка
80 | ТелоКакСоответствие = ПрочитатьJSON(ЧтениеJSON, Истина);
81 | Исключение
82 | СообщениеОбОшибке = НСтр("ru = 'Для " + ТекстМетодСервис +
83 | " тело запроса не является корректной структурой JSON.'");
84 | КонецПопытки;
85 |
86 | Если ПустаяСтрока(СообщениеОбОшибке) Тогда
87 | СообщениеОбОшибке = ПроверитьТелоЗапроса(ОбъектТела, ТелоКакСоответствие);
88 | КонецЕсли;
89 |
90 | ЧтениеJSON.Закрыть();
91 |
92 | Иначе
93 | СообщениеОбОшибке = НСтр("ru = 'Для " + ТекстМетодСервис +
94 | " в описании не определен объект для схемы """ + СхемаТелаПоMIME + """.'");
95 | КонецЕсли;
96 |
97 | Иначе
98 | СообщениеОбОшибке = НСтр("ru = 'Для " + ТекстМетодСервис +
99 | " в описании не определена схема запроса ""application/json"".'");
100 | КонецЕсли;
101 | КонецЕсли;
102 | КонецЕсли;
103 |
104 | Иначе
105 | СообщениеОбОшибке = НСтр("ru = 'Отсутствует swagger описание " + ТекстМетодСервис + ".'");
106 | КонецЕсли;
107 |
108 | Если Не ПустаяСтрока(СообщениеОбОшибке) Тогда
109 | Если ЗаписыватьОшибкуВЖурналРегистрации Тогда
110 | ЗаписьЖурналаРегистрации(ИмяСобытияЖурналаРегистрации, УровеньЖурналаРегистрации.Ошибка,,, СообщениеОбОшибке);
111 | КонецЕсли;
112 | КонецЕсли;
113 |
114 | Возврат СообщениеОбОшибке;
115 |
116 | КонецФункции
117 |
118 | // Проверяет ответ HTTP сервиса на соответствие описанию.
119 | //
120 | // Параметры:
121 | // ИмяСервиса - Наименование HTTP сервиса как оно задано в конфигураторе.
122 | // ИмяМетода - Имя метода HTTP сервиса.
123 | // Ответ - HTTPСервисОтвет - Подготовленный ответ HTTP сервиса, который будет проверен на соответствие описанию.
124 | // ЗаписыватьОшибкуВЖурналРегистрации - Булево - Способ обработки несоответствий описания и ответа.
125 | // Истина - запись в журнал регистрации,
126 | // Ложь - в ответе будет возвращен JSON с ошибкой.
127 | //
128 | // Возвращаемое значение:
129 | // HTTPСервисОтвет - Ответ HTTP сервиса для отдачи.
130 | //
131 | Функция ПроверитьОтвет(ИмяСервиса, ИмяМетода, Ответ, ЗаписыватьОшибкуВЖурналРегистрации = Истина) Экспорт
132 |
133 | Попытка
134 | МодульОписанияHTTPСервиса = ОбщегоНазначения.ОбщийМодуль(ИмяСервиса + "Описание");
135 | Описание = МодульОписанияHTTPСервиса.ПолучитьОписаниеHTTPСервиса();
136 | Объекты = МодульОписанияHTTPСервиса.ПолучитьОбъектыHTTPСервиса();
137 | Исключение
138 | Возврат Ответ;
139 | КонецПопытки;
140 |
141 | ИмяСобытияЖурналаРегистрации = "Swagger: проверка корректности HTTP ответа";
142 | ТекстМетодСервис = "метода """ + ИмяМетода + """ HTTP сервиса """ + ИмяСервиса + """";
143 |
144 | СообщениеОбОшибке = "";
145 |
146 | ОписаниеМетода = ПолучитьЗначениеОписанияМетода(Описание, ИмяМетода, "Описание");
147 | Если ЗначениеЗаполнено(ОписаниеМетода) Тогда
148 |
149 | ОтветыМетода = ПолучитьМассивЭлементовОписания(Описание, ИмяМетода, "Ответы");
150 | Если ОтветыМетода.Количество() > 0 Тогда
151 |
152 | ОтветМетода = ПолучитьОтветПоКоду(ОтветыМетода, Ответ.КодСостояния);
153 | Если ОтветМетода = Неопределено Тогда
154 | СообщениеОбОшибке = НСтр("ru = 'Для " + ТекстМетодСервис + " не определён код ответа " + Ответ.КодСостояния + ".'");
155 | Иначе
156 | Если ТипЗнч(ОтветМетода.МассивТиповMIME) = Тип("Массив") И ОтветМетода.МассивТиповMIME.Количество() > 0 Тогда
157 |
158 | ТипMIMEОтвета = Ответ.Заголовки.Получить("Content-Type");
159 | Если ТипMIMEОтвета = Неопределено Тогда
160 | СообщениеОбОшибке = НСтр("ru = 'Для " + ТекстМетодСервис + " в ответе не задан тип MIME.'");
161 | Иначе
162 | НайденТипMIME = Ложь;
163 | Для каждого ТипMIME Из ОтветМетода.МассивТиповMIME Цикл
164 | Если ТипMIME.Заголовок = ТипMIMEОтвета Тогда
165 | НайденТипMIME = Истина;
166 | Прервать;
167 | КонецЕсли;
168 | КонецЦикла;
169 | Если Не НайденТипMIME Тогда
170 | СообщениеОбОшибке = НСтр("ru = 'Для " + ТекстМетодСервис +
171 | " в ответе возвращается не описанный в документации тип MIME.'");
172 | КонецЕсли;
173 | КонецЕсли;
174 |
175 | КонецЕсли;
176 | КонецЕсли;
177 |
178 | Иначе
179 | СообщениеОбОшибке = НСтр("ru = 'Не заданы варианты ответов " + ТекстМетодСервис + ".'");
180 | КонецЕсли;
181 |
182 | Иначе
183 | СообщениеОбОшибке = НСтр("ru = 'Отсутствует swagger описание " + ТекстМетодСервис + ".'");
184 | КонецЕсли;
185 |
186 | Если Не ПустаяСтрока(СообщениеОбОшибке) Тогда
187 | Если ЗаписыватьОшибкуВЖурналРегистрации Тогда
188 | ЗаписьЖурналаРегистрации(ИмяСобытияЖурналаРегистрации, УровеньЖурналаРегистрации.Ошибка,,, СообщениеОбОшибке);
189 | Иначе
190 | Возврат ПолучитьОтветОшибки(СообщениеОбОшибке, Ложь);
191 | КонецЕсли;
192 | КонецЕсли;
193 |
194 | Возврат Ответ;
195 |
196 | КонецФункции
197 |
198 | //
199 | //
200 | Функция ПолучитьМассивЭлементовОписания(Описание, Метод, ЭлементОписания) Экспорт
201 |
202 | Параметры = Новый Массив;
203 |
204 | Если ТипЗнч(Описание) = Тип("Массив") Тогда
205 |
206 | Для каждого ДанныеОписания Из Описание Цикл
207 | Если ТипЗнч(ДанныеОписания) = Тип("Структура") И ДанныеОписания.Свойство("Имя") Тогда
208 | Если ДанныеОписания.Имя = Метод И ДанныеОписания.Свойство(ЭлементОписания) Тогда
209 | ПараметрыМетода = Неопределено;
210 | ДанныеОписания.Свойство(ЭлементОписания, ПараметрыМетода);
211 | Если ТипЗнч(ПараметрыМетода) = Тип("Массив") Тогда
212 | Параметры = ПараметрыМетода;
213 | КонецЕсли;
214 |
215 | Прервать;
216 | КонецЕсли;
217 | КонецЕсли;
218 | КонецЦикла;
219 |
220 | КонецЕсли;
221 |
222 | Возврат Параметры;
223 |
224 | КонецФункции
225 |
226 | //
227 | //
228 | Функция ПолучитьЗначениеОписанияМетода(Описание, Метод, ЭлементОписания) Экспорт
229 |
230 | ОписаниеМетода = Неопределено;
231 |
232 | Если ТипЗнч(Описание) = Тип("Массив") Тогда
233 |
234 | Для каждого ДанныеОписания Из Описание Цикл
235 | Если ТипЗнч(ДанныеОписания) = Тип("Структура") И ДанныеОписания.Свойство("Имя") Тогда
236 | Если ДанныеОписания.Имя = Метод И ДанныеОписания.Свойство(ЭлементОписания) Тогда
237 | ЗначениеМетода = Неопределено;
238 | ДанныеОписания.Свойство(ЭлементОписания, ЗначениеМетода);
239 | ОписаниеМетода = ЗначениеМетода;
240 |
241 | Прервать;
242 | КонецЕсли;
243 | КонецЕсли;
244 | КонецЦикла;
245 |
246 | КонецЕсли;
247 |
248 | Возврат ОписаниеМетода;
249 |
250 | КонецФункции
251 |
252 | #КонецОбласти
253 |
254 | #Область СлужебныеПроцедурыИФункции
255 |
256 | Функция ПолучитьОтветПоКоду(ОтветыМетода, Код)
257 |
258 | НайденныйОтветМетода = Неопределено;
259 |
260 | Если ТипЗнч(ОтветыМетода) = Тип("Массив") Тогда
261 | Для каждого ОтветМетода Из ОтветыМетода Цикл
262 | Если ТипЗнч(ОтветМетода) = Тип("Структура") И ОтветМетода.Свойство("Код") Тогда
263 | Если ОтветМетода.Код = Код Тогда
264 | НайденныйОтветМетода = ОтветМетода;
265 |
266 | Прервать;
267 | КонецЕсли;
268 | КонецЕсли;
269 | КонецЦикла;
270 | КонецЕсли;
271 |
272 | Возврат НайденныйОтветМетода;
273 |
274 | КонецФункции
275 |
276 | // Возвращает подготовленный HTTP ответ с ошибкой.
277 | //
278 | // Параметры:
279 | // ТекстОшибки - Строка - Текст ошибки.
280 | // ЭтоЗапрос - Булево - Признак обрабатываемого события.
281 | // Истина - ошибка для входящего запроса, Ложь - для исходящего ответа.
282 | //
283 | // Возвращаемое значение:
284 | // HTTPСервисОтвет - Ответ HTTP сервиса с JSON ошибки.
285 | //
286 | Функция ПолучитьОтветОшибки(ТекстОшибки, ЭтоЗапрос) Экспорт
287 |
288 | ЗаписьJSON = Новый ЗаписьJSON;
289 | ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(, Символы.Таб);
290 | ЗаписьJSON.УстановитьСтроку(ПараметрыЗаписиJSON);
291 |
292 | ЗаписьJSON.ЗаписатьНачалоОбъекта();
293 |
294 | ЗаписьJSON.ЗаписатьИмяСвойства("subject");
295 | ЗаписьJSON.ЗаписатьЗначение("Сообщение выдано из-за несоответствия описания HTTP сервиса и параметров " +
296 | ?(ЭтоЗапрос, "запроса", "ответа") +
297 | ". Необходимо привести описание в соответствии с кодом (рекомендуется) или убрать функцию проверки.");
298 |
299 | ЗаписьJSON.ЗаписатьИмяСвойства("message");
300 | ЗаписьJSON.ЗаписатьЗначение(Строка(ТекстОшибки));
301 |
302 | ЗаписьJSON.ЗаписатьКонецОбъекта();
303 |
304 | Ответ = Новый HTTPСервисОтвет(500);
305 | Ответ.Заголовки.Вставить("Content-Type", "application/json");
306 | Ответ.УстановитьТелоИзСтроки(ЗаписьJSON.Закрыть());
307 |
308 | Возврат Ответ;
309 |
310 | КонецФункции
311 |
312 | Функция ПолучитьПараметрМетода(ПараметрыМетода, КлючПараметраЗапроса)
313 |
314 | Для каждого ПараметрМетода Из ПараметрыМетода Цикл
315 | Если ПараметрМетода.Имя = КлючПараметраЗапроса Тогда
316 | Возврат ПараметрМетода;
317 | КонецЕсли;
318 | КонецЦикла;
319 |
320 | Возврат Неопределено;
321 |
322 | КонецФункции
323 |
324 | Функция ПолучитьОписаниеТела(ТелоМетода, НаименованиеТипаMIME)
325 |
326 | Для каждого ТипMIME Из ТелоМетода.МассивТиповMIME Цикл
327 | Если ТипMIME.Заголовок = НаименованиеТипаMIME Тогда
328 | // TODO: Возможность работать не только со схемой, но и с типом
329 | Возврат ТипMIME.Схема;
330 | КонецЕсли;
331 | КонецЦикла;
332 |
333 | Возврат Неопределено;
334 |
335 | КонецФункции
336 |
337 | Функция ПолучитьОбъектПоИмениСхемы(ОбъектыСервиса, ПутьКСхеме)
338 |
339 | ЭлементыПутиСхемы = СтрРазделить(ПутьКСхеме, "/");
340 | ИмяОбъекта = ЭлементыПутиСхемы[ЭлементыПутиСхемы.Количество() - 1];
341 |
342 | Для каждого ОбъектСервиса Из ОбъектыСервиса Цикл
343 | Если ОбъектСервиса.Имя = ИмяОбъекта Тогда
344 | Возврат ОбъектСервиса;
345 | КонецЕсли;
346 | КонецЦикла;
347 |
348 | Возврат Неопределено;
349 |
350 | КонецФункции
351 |
352 | Функция ПроверитьТелоЗапроса(ОбъектСервиса, ТелоКакСоответствие)
353 |
354 | // TODO:
355 | Возврат "";
356 |
357 | КонецФункции
358 |
359 | #КонецОбласти
360 |
--------------------------------------------------------------------------------
/swagger/CommonModules/Swag_Описание.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Swag_Описание
6 |
7 |
8 | ru
9 | Описание
10 |
11 |
12 |
13 | false
14 | false
15 | true
16 | false
17 | false
18 | false
19 | false
20 | DontUse
21 |
22 |
23 |
--------------------------------------------------------------------------------
/swagger/CommonModules/Swag_Описание/Ext/Module.bsl:
--------------------------------------------------------------------------------
1 |
2 | #Область ПрограммныйИнтерфейс
3 |
4 | //
5 | //
6 | Функция Объект(ИмяОбъекта) Экспорт
7 |
8 | ПроцессорОписаний = Обработки.Swag_ПроцессорОписанийОбъектов.Создать();
9 | ПроцессорОписаний.Объект(ИмяОбъекта);
10 |
11 | Возврат ПроцессорОписаний;
12 |
13 | КонецФункции
14 |
15 | //
16 | //
17 | Функция Метод(ИмяМетода) Экспорт
18 |
19 | ПроцессорОписаний = Обработки.Swag_ПроцессорОписанийМетодов.Создать();
20 | ПроцессорОписаний.Метод(ИмяМетода);
21 |
22 | Возврат ПроцессорОписаний;
23 |
24 | КонецФункции
25 |
26 | #КонецОбласти
27 |
--------------------------------------------------------------------------------
/swagger/CommonModules/Swag_ФормированиеОписаний.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Swag_ФормированиеОписаний
6 |
7 |
8 | ru
9 | Формирование описаний
10 |
11 |
12 |
13 | false
14 | false
15 | true
16 | false
17 | false
18 | false
19 | false
20 | DontUse
21 |
22 |
23 |
--------------------------------------------------------------------------------
/swagger/CommonModules/Swag_ФормированиеОписаний/Ext/Module.bsl:
--------------------------------------------------------------------------------
1 | #Область ПрограммныйИнтерфейс
2 |
3 | // Возвращает структуру с описанием параметра HTTP сервиса
4 | //
5 | // Параметры:
6 | // Имя - Строка - наименование параметра
7 | // ОписаниеПараметра - Строка - описание параметра как оно будет выглядеть в документации
8 | // ТипПараметра - Строка - допустимые значения: query, path, header, form
9 | // Обязательный - Булево - признак того что это обязательный параметр
10 | // Устарел - Булево - признак deprecated
11 | // ТипЗначения - Строка - допустимые значения: boolean, string, integer, number, array, object
12 | //
13 | // Возвращаемое значение:
14 | // Структура - описание параметра
15 | //
16 | Функция ОписаниеПараметра(Имя, ОписаниеПараметра, ТипПараметра, Обязательный = Ложь, Устарел = Ложь,
17 | ТипЗначения = "string", Перечисление = Неопределено, МаксимальнаяДлина = Неопределено,
18 | МинимальнаяДлина = Неопределено) Экспорт
19 |
20 | Если ТипПараметра = "path" Тогда
21 | Обязательный = Истина;
22 | КонецЕсли;
23 |
24 | Возврат Новый Структура("Имя, Описание, ТипПараметра, Обязательный, Устарел, ТипЗначения,
25 | |Перечисление, МаксимальнаяДлина, МинимальнаяДлина",
26 | Имя, ОписаниеПараметра, ТипПараметра, Обязательный, Устарел, ТипЗначения,
27 | Перечисление, МаксимальнаяДлина, МинимальнаяДлина)
28 |
29 | КонецФункции
30 |
31 | // Возвращает структуру с описанием ответа HTTP сервиса
32 | //
33 | // Параметры:
34 | // Код - Число - код ответа HTTP (200, 201, 401, 404 и т.д.)
35 | // ОписаниеОтвета - Строка - описание ответа как он будет выглядеть в документации
36 | // МассивТиповMIME - Массив из см. Swag_ФормированиеОписаний.ОписаниеТипаMIME
37 | //
38 | // Возвращаемое значение:
39 | // Структура - описание сервиса
40 | //
41 | Функция ОписаниеОтвета(Код, ОписаниеОтвета, МассивТиповMIME = Неопределено) Экспорт
42 |
43 | Возврат Новый Структура("Код, Описание, МассивТиповMIME", Код, ОписаниеОтвета, МассивТиповMIME)
44 |
45 | КонецФункции
46 |
47 | // Возвращает структуру с описанием типа MIME ответа
48 | //
49 | // Параметры:
50 | // Заголовок - Строка - описание типа MIME (application/json, application/json-patch+json и т.д.)
51 | // Тип - Строка - допустимые значения: string, array
52 | // Схема - Строка - наименование объекта как он задан через функцию ОписаниеОбъекта
53 | //
54 | // Возвращаемое значение:
55 | // Структура - описание MIME ответа
56 | //
57 | Функция ОписаниеТипаMIME(Заголовок, Тип = Неопределено, Схема = Неопределено) Экспорт
58 |
59 | Возврат Новый Структура("Заголовок, Тип, Схема", Заголовок, Тип,
60 | ?(ТипЗнч(Схема) = Тип("Строка"), "#/components/schemas/" + Схема, ""));
61 |
62 | КонецФункции
63 |
64 | // Возвращает структуру с описанием метода HTTP сервиса
65 | //
66 | // Параметры:
67 | // Метод - Строка - наименование метода как он описан в конфигураторе.
68 | // Строится по принципу <Имя шаблона URL><Имя метода>
69 | // ОписаниеМетода - Строка - описание метода как оно будет выглядеть в документации
70 | // Параметры - Массив из см. Swag_ФормированиеОписаний.ОписаниеПараметра
71 | // Ответы - Массив из см. Swag_ФормированиеОписаний.ОписаниеОтвета
72 | // ТелоЗапроса - Структура - применяется для POST, PUT, CONNECT и PATCH
73 | //
74 | // Возвращаемое значение:
75 | // Структура - описание метода HTTP сервиса
76 | //
77 | Функция ОписаниеМетода(Метод, ОписаниеМетода, Параметры, Ответы, ТелоЗапроса = Неопределено) Экспорт
78 |
79 | Возврат Новый Структура("Имя, Описание, Параметры, Ответы, ТелоЗапроса",
80 | Метод, ОписаниеМетода, Параметры, Ответы, ТелоЗапроса)
81 |
82 | КонецФункции
83 |
84 | // Возвращает структуру с описанием объекта (модели)
85 | //
86 | // Параметры:
87 | // Имя - Строка - наименование объекта (модели)
88 | // Тип - Строка - допустимые значения
89 | // МассивСвойств - Массив из см. Swag_ФормированиеОписаний.ОписаниеОбъекта
90 | // ОбязательныеПоля - Строка - наименования полей, разделенные запятыми
91 | //
92 | // Возвращаемое значение:
93 | // Структура - описание объекта (модели)
94 | //
95 | Функция ОписаниеОбъекта(Имя, Тип, МассивСвойств = Неопределено, ОбязательныеПоля = Неопределено) Экспорт
96 |
97 | Возврат Новый Структура("Имя, Тип, МассивСвойств, ОбязательныеПоля",
98 | Имя, Тип, МассивСвойств, ОбязательныеПоля);
99 |
100 | КонецФункции
101 |
102 | // Устарела. Следует использовать ОписаниеРеквизитаОбъекта
103 | // Возвращает структуру с описанием свойства объекта (модели)
104 | //
105 | // Параметры:
106 | // Имя - Строка - наименование свойства объекта (модели)
107 | // ОписаниеСвойства - Строка - описание свойства объекта как оно будет выглядеть в документации
108 | // Nullable - Булево
109 | // Тип - Строка - допустимые значения: boolean, string, integer, number, array, object
110 | // Формат - Строка - допустимые значения:
111 | // для string - byte, binary, date, datetime, password, uuid (последнее в спецификации
112 | // вроде бы нет, но я видел в некоторых реализациях)
113 | // для integer - int32, int64 (последнее аналог long)
114 | // для number - float, double
115 | // Схема - Строка -
116 | // Пример - Строка -
117 | // Перечисление - Массив -
118 | //
119 | // Возвращаемое значение:
120 | // Структура - описание свойства объекта (модели)
121 | //
122 | Функция ОписаниеСвойстваОбъекта(Имя, ОписаниеСвойства, Тип, Nullable = Ложь, Формат = Неопределено,
123 | Схема = Неопределено, Пример = Неопределено, Перечисление = Неопределено) Экспорт
124 |
125 | Возврат Новый Структура("Имя, Описание, Тип, Nullable, Формат, Схема, Пример, Перечисление",
126 | Имя, ОписаниеСвойства, Тип, Nullable, Формат, ?(ТипЗнч(Схема) = Тип("Строка"), "#/components/schemas/" + Схема, ""),
127 | Пример, Перечисление);
128 |
129 | КонецФункции
130 |
131 | // Возвращает минимально заполненную структуру с описанием реквизита объекта (модели)
132 | //
133 | // Параметры:
134 | // Имя - Строка - наименование реквизита объекта (модели)
135 | // Тип - Строка - допустимые значения: boolean, string, integer, number, array, object
136 | // Схема - Строка - название объекта для массива (array) или объекта (object)
137 | //
138 | // Возвращаемое значение:
139 | // Структура - описание свойства объекта (модели)
140 | //
141 | Функция ОписаниеРеквизитаОбъекта(Имя, Тип, Схема = Неопределено) Экспорт
142 |
143 | Если Тип = "array" Или Тип = "object" Тогда
144 | СхемаСПрефиксом = ?(ТипЗнч(Схема) = Тип("Строка"),
145 | "#/components/schemas/" + Схема, Неопределено);
146 | Иначе
147 | СхемаСПрефиксом = Неопределено;
148 | КонецЕсли;
149 |
150 | Возврат Новый Структура("Имя, Тип, Схема, Описание, Nullable, Обязательный, Формат,
151 | |Максимум, Минимум, НеВключаяМаксимум, НеВключаяМинимум, МаксимальнаяДлина, МинимальнаяДлина,
152 | |ПоУмолчанию, Пример, Перечисление", Имя, Тип, СхемаСПрефиксом);
153 |
154 | КонецФункции
155 |
156 | // Возвращает структуру с описанием тела запроса
157 | //
158 | // Параметры:
159 | // ОписаниеТела - Строка - описание тела запроса как оно будет выглядеть в документации
160 | // МассивТиповMIME - Массив из см. Swag_ФормированиеОписаний.ОписаниеТипаMIME
161 | //
162 | // Возвращаемое значение:
163 | // Структура - описание тела запроса
164 | //
165 | Функция ОписаниеТелаЗапроса(ОписаниеТела, МассивТиповMIME = Неопределено) Экспорт
166 |
167 | Возврат Новый Структура("Описание, МассивТиповMIME", ОписаниеТела, МассивТиповMIME);
168 |
169 | КонецФункции
170 |
171 | #КонецОбласти
172 |
--------------------------------------------------------------------------------
/swagger/CommonTemplates/Swag_favicon_16x16_png.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Swag_favicon_16x16_png
6 |
7 |
8 | ru
9 | favicon-16x16.png
10 |
11 |
12 |
13 | BinaryData
14 |
15 |
16 |
--------------------------------------------------------------------------------
/swagger/CommonTemplates/Swag_favicon_16x16_png/Ext/Template.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zerobig/swagger-1c/298469edd4c9dcedbc704e0f252795f91361690c/swagger/CommonTemplates/Swag_favicon_16x16_png/Ext/Template.bin
--------------------------------------------------------------------------------
/swagger/CommonTemplates/Swag_favicon_32x32_png.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Swag_favicon_32x32_png
6 |
7 |
8 | ru
9 | favicon-32x32.png
10 |
11 |
12 |
13 | BinaryData
14 |
15 |
16 |
--------------------------------------------------------------------------------
/swagger/CommonTemplates/Swag_favicon_32x32_png/Ext/Template.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zerobig/swagger-1c/298469edd4c9dcedbc704e0f252795f91361690c/swagger/CommonTemplates/Swag_favicon_32x32_png/Ext/Template.bin
--------------------------------------------------------------------------------
/swagger/CommonTemplates/Swag_index_html.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Swag_index_html
6 |
7 |
8 | ru
9 | index.html
10 |
11 |
12 |
13 | TextDocument
14 |
15 |
16 |
--------------------------------------------------------------------------------
/swagger/CommonTemplates/Swag_index_html/Ext/Template.txt:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Swagger UI
7 |
8 |
9 |
10 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
59 |
60 |
--------------------------------------------------------------------------------
/swagger/CommonTemplates/Swag_rapidoc_index_html.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Swag_rapidoc_index_html
6 |
7 |
8 | ru
9 | Swag rapidoc index html
10 |
11 |
12 |
13 | TextDocument
14 |
15 |
16 |
--------------------------------------------------------------------------------
/swagger/CommonTemplates/Swag_rapidoc_index_html/Ext/Template.txt:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/swagger/CommonTemplates/Swag_rapidoc_min_js.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Swag_rapidoc_min_js
6 |
7 |
8 | ru
9 | Swag rapidoc min js
10 |
11 |
12 |
13 | BinaryData
14 |
15 |
16 |
--------------------------------------------------------------------------------
/swagger/CommonTemplates/Swag_redoc_index_html.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Swag_redoc_index_html
6 |
7 |
8 | ru
9 | Swag redoc index html
10 |
11 |
12 |
13 | TextDocument
14 |
15 |
16 |
--------------------------------------------------------------------------------
/swagger/CommonTemplates/Swag_redoc_index_html/Ext/Template.txt:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Redoc
5 |
6 |
7 |
8 |
9 |
10 |
13 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
--------------------------------------------------------------------------------
/swagger/CommonTemplates/Swag_redoc_standalone_js.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Swag_redoc_standalone_js
6 |
7 |
8 | ru
9 | Swag redoc standalone js
10 |
11 |
12 |
13 | BinaryData
14 |
15 |
16 |
--------------------------------------------------------------------------------
/swagger/CommonTemplates/Swag_scalar_api_reference_js.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Swag_scalar_api_reference_js
6 |
7 |
8 | ru
9 | Swag scalar api reference js
10 |
11 |
12 |
13 | BinaryData
14 |
15 |
16 |
--------------------------------------------------------------------------------
/swagger/CommonTemplates/Swag_scalar_index_html.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Swag_scalar_index_html
6 |
7 |
8 | ru
9 | Swag scalar index html
10 |
11 |
12 |
13 | TextDocument
14 |
15 |
16 |
--------------------------------------------------------------------------------
/swagger/CommonTemplates/Swag_scalar_index_html/Ext/Template.txt:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Scalar API Reference
5 |
6 |
9 |
10 |
11 |
14 |
15 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/swagger/CommonTemplates/Swag_stoplight_elements_styles_min_css.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Swag_stoplight_elements_styles_min_css
6 |
7 |
8 | ru
9 | Swag stoplight elements styles min css
10 |
11 |
12 |
13 | BinaryData
14 |
15 |
16 |
--------------------------------------------------------------------------------
/swagger/CommonTemplates/Swag_stoplight_elements_web_components_min_js.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Swag_stoplight_elements_web_components_min_js
6 |
7 |
8 | ru
9 | Swag stoplight elements web components min js
10 |
11 |
12 |
13 | BinaryData
14 |
15 |
16 |
--------------------------------------------------------------------------------
/swagger/CommonTemplates/Swag_stoplight_index_html.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Swag_stoplight_index_html
6 |
7 |
8 | ru
9 | Swag stoplight index html
10 |
11 |
12 |
13 | TextDocument
14 |
15 |
16 |
--------------------------------------------------------------------------------
/swagger/CommonTemplates/Swag_stoplight_index_html/Ext/Template.txt:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Elements in HTML
7 |
8 |
9 |
10 |
11 |
12 |
13 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/swagger/CommonTemplates/Swag_swagger_ui_bundle_js.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Swag_swagger_ui_bundle_js
6 |
7 |
8 | ru
9 | swagger-ui-bundle.js
10 |
11 |
12 |
13 | BinaryData
14 |
15 |
16 |
--------------------------------------------------------------------------------
/swagger/CommonTemplates/Swag_swagger_ui_css.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Swag_swagger_ui_css
6 |
7 |
8 | ru
9 | swagger-ui.css
10 |
11 |
12 |
13 | BinaryData
14 |
15 |
16 |
--------------------------------------------------------------------------------
/swagger/CommonTemplates/Swag_swagger_ui_standalone_preset_js.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Swag_swagger_ui_standalone_preset_js
6 |
7 |
8 | ru
9 | swagger-ui-standalone-preset.js
10 |
11 |
12 |
13 | BinaryData
14 |
15 |
16 |
--------------------------------------------------------------------------------
/swagger/Configuration.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | 9cd510cd-abfc-11d4-9434-004095e12fc7
7 | b40d6cec-b8e4-422c-9bd4-fc0a7ce17b91
8 |
9 |
10 | 9fcd25a0-4822-11d4-9414-008048da11f9
11 | 46a29df4-e5a6-4dc4-8395-27d754a16cca
12 |
13 |
14 | e3687481-0a87-462c-a166-9f34594f9bba
15 | e25397a5-1013-4d4b-9c84-aa6238973246
16 |
17 |
18 | 9de14907-ec23-4a07-96f0-85521cb6b53b
19 | 25f8dfd3-7ef2-4972-b701-5ce5522d179b
20 |
21 |
22 | 51f2d5d8-ea4d-4064-8892-82951750031e
23 | 46d34b08-e437-45e9-a175-9d3d8fa61034
24 |
25 |
26 | e68182ea-4237-4383-967f-90c1e3370bc7
27 | dfb07a2e-b276-4f10-b327-2194c8174451
28 |
29 |
30 | fb282519-d103-4dd3-bc12-cb271d631dfc
31 | de8f7c03-7779-4b8e-b08c-8597d7c3179f
32 |
33 |
34 |
35 | Adopted
36 | Swagger
37 |
38 |
39 | ru
40 | Swagger
41 |
42 |
43 |
44 | Customization
45 | true
46 | Swag_
47 | Version8_3_10
48 | ManagedApplication
49 |
50 | PlatformApplication
51 |
52 | Russian
53 |
54 | 1.2.6
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 | Русский
63 | Swag_ОсновнаяРоль
64 | Swag_favicon_16x16_png
65 | Swag_favicon_32x32_png
66 | Swag_index_html
67 | Swag_rapidoc_index_html
68 | Swag_rapidoc_min_js
69 | Swag_redoc_index_html
70 | Swag_redoc_standalone_js
71 | Swag_scalar_api_reference_js
72 | Swag_scalar_index_html
73 | Swag_stoplight_elements_styles_min_css
74 | Swag_stoplight_elements_web_components_min_js
75 | Swag_stoplight_index_html
76 | Swag_swagger_ui_bundle_js
77 | Swag_swagger_ui_css
78 | Swag_swagger_ui_standalone_preset_js
79 | Swag_Запросы
80 | Swag_ОбработкаHTTP
81 | Swag_Описание
82 | Swag_ФормированиеОписаний
83 | Swag_Сервис
84 | Swag_ПроцессорОписанийМетодов
85 | Swag_ПроцессорОписанийОбъектов
86 |
87 |
88 |
--------------------------------------------------------------------------------
/swagger/DataProcessors/Swag_ПроцессорОписанийМетодов.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | 52503cdb-489b-4d4b-9562-75cdd87089a6
7 | 9462aad4-5d10-491e-bab4-e2ed43e57c49
8 |
9 |
10 | ed7285f5-71d8-41cf-937f-74e0cb4ece90
11 | 248ff1b1-455c-4eb8-a60a-da225ca60b83
12 |
13 |
14 |
15 | Swag_ПроцессорОписанийМетодов
16 |
17 |
18 | ru
19 | Процессор описаний методов
20 |
21 |
22 |
23 | true
24 |
25 |
26 | false
27 |
28 |
29 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/swagger/DataProcessors/Swag_ПроцессорОписанийМетодов/Ext/ObjectModule.bsl:
--------------------------------------------------------------------------------
1 | Перем СтруктураОписания;
2 |
3 | #Область ПрограммныйИнтерфейс
4 |
5 | #Область Метод
6 |
7 | //
8 | //
9 | Функция Метод(ИмяМетода) Экспорт
10 |
11 | Если ПустаяСтрока(ИмяМетода) Тогда
12 | ВызватьИсключение "Объект: имя метода не может быть пустым";
13 | КонецЕсли;
14 |
15 | Если СтруктураОписания = Неопределено Тогда
16 | СтруктураОписания = Новый Структура;
17 | КонецЕсли;
18 |
19 | СтруктураОписания.Вставить("ИмяМетода", ИмяМетода);
20 |
21 | ДобавитьПоследнийМетодВМассивМетодов();
22 |
23 | // Новый текущий объект
24 | СтруктураОписания.Вставить("ТекущийМетод",
25 | Новый Структура("Имя, Описание, Параметры, Ответы, ТелоЗапроса, ДетальноеОписание", ИмяМетода));
26 |
27 | Возврат ЭтотОбъект;
28 |
29 | КонецФункции
30 |
31 | //
32 | //
33 | Функция ОписаниеМетода(СтрокаОписания) Экспорт
34 |
35 | Если СтруктураОписания = Неопределено Или
36 | Не СтруктураОписания.Свойство("ИмяМетода") Или
37 | ПустаяСтрока(СтруктураОписания.ИмяМетода) Тогда
38 |
39 | ВызватьИсключение "ОписаниеМетода: нельзя задавать описание для неопределенного метода";
40 | КонецЕсли;
41 |
42 | СтруктураОписания.ТекущийМетод.Описание = СтрокаОписания;
43 |
44 | Возврат ЭтотОбъект;
45 |
46 | КонецФункции
47 |
48 | //
49 | //
50 | Функция ДетальноеОписаниеМетода(СтрокаОписания) Экспорт
51 |
52 | Если СтруктураОписания = Неопределено Или
53 | Не СтруктураОписания.Свойство("ИмяМетода") Или
54 | ПустаяСтрока(СтруктураОписания.ИмяМетода) Тогда
55 |
56 | ВызватьИсключение "ОписаниеМетода: нельзя задавать описание для неопределенного метода";
57 | КонецЕсли;
58 |
59 | СтруктураОписания.ТекущийМетод.ДетальноеОписание = СтрокаОписания;
60 |
61 | Возврат ЭтотОбъект;
62 |
63 | КонецФункции
64 |
65 | #КонецОбласти
66 |
67 | #Область Параметр
68 |
69 | //
70 | //
71 | Функция ПараметрЗапроса(ИмяПараметра) Экспорт
72 | ДобавитьПараметрВМассивПараметров(ИмяПараметра, "query", "ПараметрЗапроса");
73 | Возврат ЭтотОбъект;
74 | КонецФункции
75 |
76 | //
77 | //
78 | Функция ПараметрURL(ИмяПараметра) Экспорт
79 | ДобавитьПараметрВМассивПараметров(ИмяПараметра, "path", "ПараметрURL");
80 | Возврат ЭтотОбъект;
81 | КонецФункции
82 |
83 | //
84 | //
85 | Функция ПараметрЗаголовка(ИмяПараметра) Экспорт
86 | ДобавитьПараметрВМассивПараметров(ИмяПараметра, "header", "ПараметрЗаголовка");
87 | Возврат ЭтотОбъект;
88 | КонецФункции
89 |
90 | //
91 | //
92 | Функция ПараметрФормы(ИмяПараметра) Экспорт
93 | ДобавитьПараметрВМассивПараметров(ИмяПараметра, "form", "ПараметрФормы");
94 | Возврат ЭтотОбъект;
95 | КонецФункции
96 |
97 | //
98 | //
99 | Функция ОписаниеПараметра(СтрокаОписания) Экспорт
100 | УстановитьЗначениеСвойстваПараметра("Описание", СтрокаОписания, "ОписаниеПараметра");
101 | Возврат ЭтотОбъект;
102 | КонецФункции
103 |
104 | //
105 | //
106 | Функция Обязательный() Экспорт
107 | УстановитьЗначениеСвойстваПараметра("Обязательный", Истина, "Обязательный");
108 | Возврат ЭтотОбъект;
109 | КонецФункции
110 |
111 | //
112 | //
113 | Функция ТипЗначения(Тип) Экспорт
114 | УстановитьЗначениеСвойстваПараметра("ТипЗначения", Тип, "ТипЗначения");
115 | Возврат ЭтотОбъект;
116 | КонецФункции
117 |
118 | //
119 | //
120 | Функция ЗначениеПеречисления(Значение) Экспорт
121 |
122 | Если СтруктураОписания = Неопределено Или
123 | Не СтруктураОписания.Свойство("ИмяМетода") Или
124 | ПустаяСтрока(СтруктураОписания.ИмяМетода) Тогда
125 |
126 | ВызватьИсключение "ЗначениеПеречисления: нельзя задавать свойство параметра для неопределенного метода";
127 | КонецЕсли;
128 | Если Не СтруктураОписания.Свойство("ИмяТекущегоПараметра") Или
129 | ПустаяСтрока(СтруктураОписания.ИмяТекущегоПараметра) Тогда
130 |
131 | ВызватьИсключение "ЗначениеПеречисления: нельзя задавать свойство параметра для неопределенного параметра";
132 | КонецЕсли;
133 |
134 | МассивПеречислений = Новый Массив;
135 | Для каждого Параметр Из СтруктураОписания.ТекущийМетод.Параметры Цикл
136 | Если Параметр.Имя = СтруктураОписания.ИмяТекущегоПараметра И
137 | Параметр.Свойство("Перечисление") И
138 | ТипЗнч(Параметр.Перечисление) = Тип("Массив") Тогда
139 |
140 | МассивПеречислений = Параметр.Перечисление;
141 | Прервать;
142 | КонецЕсли;
143 | КонецЦикла;
144 |
145 | МассивПеречислений.Добавить(Значение);
146 | Параметр.Перечисление = МассивПеречислений;
147 |
148 | Возврат ЭтотОбъект;
149 |
150 | КонецФункции
151 |
152 | //
153 | //
154 | Функция МаксимальнаяДлина(Значение) Экспорт
155 | УстановитьЗначениеСвойстваПараметра("МаксимальнаяДлина", Значение, "МаксимальнаяДлина");
156 | Возврат ЭтотОбъект;
157 | КонецФункции
158 |
159 | //
160 | //
161 | Функция МинимальнаяДлина(Значение) Экспорт
162 | УстановитьЗначениеСвойстваПараметра("МинимальнаяДлина", Значение, "МинимальнаяДлина");
163 | Возврат ЭтотОбъект;
164 | КонецФункции
165 |
166 | #КонецОбласти
167 |
168 | #Область Ответ
169 |
170 | //
171 | //
172 | Функция Ответ(КодОтвета) Экспорт
173 |
174 | ПроверитьДанныеМетода("Ответ", "ответ");
175 |
176 | СтруктураОписания.Вставить("КодТекущегоОтвета", КодОтвета);
177 |
178 | МассивОтветов = Новый Массив;
179 | Если СтруктураОписания.ТекущийМетод.Свойство("Ответы") И
180 | ТипЗнч(СтруктураОписания.ТекущийМетод.Ответы) = Тип("Массив") Тогда
181 |
182 | МассивОтветов = СтруктураОписания.ТекущийМетод.Ответы;
183 | КонецЕсли;
184 |
185 | МассивОтветов.Добавить(Новый Структура("Код, Описание, МассивТиповMIME", КодОтвета));
186 | СтруктураОписания.ТекущийМетод.Вставить("Ответы", МассивОтветов);
187 |
188 | Возврат ЭтотОбъект;
189 |
190 | КонецФункции
191 |
192 | //
193 | //
194 | Функция ОписаниеОтвета(СтрокаОписания) Экспорт
195 |
196 | ПроверитьДанныеОтвета("ОписаниеОтвета");
197 |
198 | Для каждого Ответ Из СтруктураОписания.ТекущийМетод.Ответы Цикл
199 | Если Ответ.Код = СтруктураОписания.КодТекущегоОтвета Тогда
200 | Ответ.Описание = СтрокаОписания;
201 | Прервать;
202 | КонецЕсли;
203 | КонецЦикла;
204 |
205 | Возврат ЭтотОбъект;
206 |
207 | КонецФункции
208 |
209 | //
210 | //
211 | Функция ТипОтвета(Заголовок) Экспорт
212 |
213 | ПроверитьДанныеОтвета("ТипОтвета");
214 |
215 | Для каждого Ответ Из СтруктураОписания.ТекущийМетод.Ответы Цикл
216 | Если Ответ.Код = СтруктураОписания.КодТекущегоОтвета Тогда
217 | МассивТиповMIME = Новый Массив;
218 | Если Ответ.Свойство("МассивТиповMIME") И ТипЗнч(Ответ.МассивТиповMIME) = Тип("Массив") Тогда
219 | МассивТиповMIME = Ответ.МассивТиповMIME;
220 | КонецЕсли;
221 |
222 | МассивТиповMIME.Добавить(Новый Структура("Заголовок, Тип, Схема", Заголовок));
223 | Ответ.МассивТиповMIME = МассивТиповMIME;
224 |
225 | СтруктураОписания.Вставить("ЗаголовокТекущегоОтвета", Заголовок);
226 | Прервать;
227 | КонецЕсли;
228 | КонецЦикла;
229 |
230 | Возврат ЭтотОбъект;
231 |
232 | КонецФункции
233 |
234 | //
235 | //
236 | Функция СхемаОтвета(ТипОбъекта) Экспорт
237 |
238 | ПроверитьДанныеОтвета("СхемаОтвета");
239 | Если Не СтруктураОписания.Свойство("ЗаголовокТекущегоОтвета") Или
240 | ПустаяСтрока(СтруктураОписания.ЗаголовокТекущегоОтвета) Тогда
241 |
242 | ВызватьИсключение "СхемаОтвета: нельзя задавать схему ответа для неопределенного типа ответа";
243 | КонецЕсли;
244 |
245 | Нашли = Ложь;
246 | Для каждого Ответ Из СтруктураОписания.ТекущийМетод.Ответы Цикл
247 | Если Ответ.Код = СтруктураОписания.КодТекущегоОтвета Тогда
248 | Для каждого ТипMIME Из Ответ.МассивТиповMIME Цикл
249 | Если ТипMIME.Заголовок = СтруктураОписания.ЗаголовокТекущегоОтвета Тогда
250 | ТипMIME.Схема = СтрШаблон("#/components/schemas/%1", ТипОбъекта);
251 |
252 | Нашли = Истина;
253 | Прервать;
254 | КонецЕсли;
255 | КонецЦикла;
256 | Если Нашли Тогда
257 | Прервать;
258 | КонецЕсли;
259 | КонецЕсли;
260 | КонецЦикла;
261 |
262 | Возврат ЭтотОбъект;
263 |
264 | КонецФункции
265 |
266 | #КонецОбласти
267 |
268 | #Область Тело
269 |
270 | //
271 | //
272 | Функция Тело(СтрокаОписания = Неопределено) Экспорт
273 |
274 | ПроверитьДанныеМетода("Тело", "тело запроса");
275 |
276 | СтруктураОписания.ТекущийМетод.Вставить("ТелоЗапроса",
277 | Новый Структура("Описание, МассивТиповMIME", СтрокаОписания));
278 |
279 | Возврат ЭтотОбъект;
280 |
281 | КонецФункции
282 |
283 | //
284 | //
285 | Функция ТипТела(Заголовок) Экспорт
286 |
287 | ПроверитьДанныеТела("ТипТела");
288 |
289 | МассивТиповMIME = Новый Массив;
290 | Если СтруктураОписания.ТекущийМетод.ТелоЗапроса.Свойство("МассивТиповMIME") И
291 | ТипЗнч(СтруктураОписания.ТекущийМетод.ТелоЗапроса.МассивТиповMIME) = Тип("Массив") Тогда
292 |
293 | МассивТиповMIME = СтруктураОписания.ТекущийМетод.ТелоЗапроса.МассивТиповMIME;
294 | КонецЕсли;
295 |
296 | МассивТиповMIME.Добавить(Новый Структура("Заголовок, Тип, Схема", Заголовок));
297 | СтруктураОписания.ТекущийМетод.ТелоЗапроса.МассивТиповMIME = МассивТиповMIME;
298 |
299 | СтруктураОписания.Вставить("ЗаголовокТелаЗапроса", Заголовок);
300 |
301 | Возврат ЭтотОбъект;
302 |
303 | КонецФункции
304 |
305 | //
306 | //
307 | Функция СхемаТела(ТипОбъекта) Экспорт
308 |
309 | ПроверитьДанныеТела("ТипТела");
310 |
311 | Для каждого ТипMIME Из СтруктураОписания.ТекущийМетод.ТелоЗапроса.МассивТиповMIME Цикл
312 | Если ТипMIME.Заголовок = СтруктураОписания.ЗаголовокТелаЗапроса Тогда
313 | ТипMIME.Схема = СтрШаблон("#/components/schemas/%1", ТипОбъекта);
314 | Прервать;
315 | КонецЕсли;
316 | КонецЦикла;
317 |
318 | Возврат ЭтотОбъект;
319 |
320 | КонецФункции
321 |
322 | #КонецОбласти
323 |
324 | //
325 | //
326 | Функция Сформировать() Экспорт
327 |
328 | ДобавитьПоследнийМетодВМассивМетодов();
329 |
330 | МассивОписанийМетодов = Новый Массив;
331 | Если СтруктураОписания.Свойство("МассивМетодов") И
332 | ТипЗнч(СтруктураОписания.МассивМетодов) = Тип("Массив") Тогда
333 |
334 | Для каждого Метод Из СтруктураОписания.МассивМетодов Цикл
335 |
336 | Описание = Метод.Описание;
337 | Если ЗначениеЗаполнено(Метод.ДетальноеОписание) Тогда
338 | Описание = Новый Структура("Описание, ДетальноеОписание",
339 | Метод.Описание, Метод.ДетальноеОписание);
340 | КонецЕсли;
341 |
342 | МассивОписанийМетодов.Добавить(
343 | Swag_ФормированиеОписаний.ОписаниеМетода(Метод.Имя, Описание,
344 | Метод.Параметры, Метод.Ответы, Метод.ТелоЗапроса));
345 |
346 | КонецЦикла;
347 | КонецЕсли;
348 |
349 | Возврат МассивОписанийМетодов;
350 |
351 | КонецФункции
352 |
353 | #КонецОбласти
354 |
355 | #Область СлужебныеПроцедурыИФункции
356 |
357 | Процедура ДобавитьПоследнийМетодВМассивМетодов()
358 |
359 | Если СтруктураОписания.Свойство("ТекущийМетод") И
360 | ТипЗнч(СтруктураОписания.ТекущийМетод) = Тип("Структура")
361 | И Не СтруктураОписания.ТекущийМетод.Количество() = 0 Тогда
362 |
363 | МассивМетодов = Новый Массив;
364 | Если СтруктураОписания.Свойство("МассивМетодов") И
365 | ТипЗнч(СтруктураОписания.МассивМетодов) = Тип("Массив") Тогда
366 |
367 | МассивМетодов = СтруктураОписания.МассивМетодов;
368 | КонецЕсли;
369 |
370 | МассивМетодов.Добавить(СтруктураОписания.ТекущийМетод);
371 | СтруктураОписания.Вставить("МассивМетодов", МассивМетодов);
372 | КонецЕсли;
373 |
374 | КонецПроцедуры
375 |
376 | Процедура ДобавитьПараметрВМассивПараметров(ИмяПараметра, ТипПараметра, НазваниеПроцедуры)
377 |
378 | Если СтруктураОписания = Неопределено Или
379 | Не СтруктураОписания.Свойство("ИмяМетода") Или
380 | ПустаяСтрока(СтруктураОписания.ИмяМетода) Тогда
381 |
382 | ВызватьИсключение СтрШаблон("%1: нельзя задавать параметр для неопределенного метода",
383 | НазваниеПроцедуры);
384 | КонецЕсли;
385 | Если ПустаяСтрока(ИмяПараметра) Тогда
386 | ВызватьИсключение СтрШаблон("%1: имя параметра не может быть пустым", НазваниеПроцедуры);
387 | КонецЕсли;
388 |
389 | СтруктураОписания.Вставить("ИмяТекущегоПараметра", ИмяПараметра);
390 |
391 | МассивПараметров = Новый Массив;
392 | Если СтруктураОписания.ТекущийМетод.Свойство("Параметры") И
393 | ТипЗнч(СтруктураОписания.ТекущийМетод.Параметры) = Тип("Массив") Тогда
394 |
395 | МассивПараметров = СтруктураОписания.ТекущийМетод.Параметры;
396 | КонецЕсли;
397 |
398 | Обязательный = Ложь;
399 | Если ТипПараметра = "path" Тогда
400 | Обязательный = Истина;
401 | КонецЕсли;
402 |
403 | МассивПараметров.Добавить(Новый Структура("Имя, Описание, ТипПараметра, Обязательный,
404 | |Устарел, ТипЗначения, Перечисление, МаксимальнаяДлина, МинимальнаяДлина",
405 | ИмяПараметра, , ТипПараметра, Обязательный));
406 | СтруктураОписания.ТекущийМетод.Вставить("Параметры", МассивПараметров);
407 |
408 | КонецПроцедуры
409 |
410 | Процедура УстановитьЗначениеСвойстваПараметра(ИмяСвойстваПараметра, Значение, НазваниеПроцедуры)
411 |
412 | Если СтруктураОписания = Неопределено Или
413 | Не СтруктураОписания.Свойство("ИмяМетода") Или
414 | ПустаяСтрока(СтруктураОписания.ИмяМетода) Тогда
415 |
416 | ВызватьИсключение СтрШаблон("%1: нельзя задавать свойство параметра для неопределенного метода",
417 | НазваниеПроцедуры);
418 | КонецЕсли;
419 | Если Не СтруктураОписания.Свойство("ИмяТекущегоПараметра") Или
420 | ПустаяСтрока(СтруктураОписания.ИмяТекущегоПараметра) Тогда
421 |
422 | ВызватьИсключение СтрШаблон("%1: нельзя задавать свойство параметра для неопределенного параметра",
423 | НазваниеПроцедуры);
424 | КонецЕсли;
425 |
426 | Для каждого Параметр Из СтруктураОписания.ТекущийМетод.Параметры Цикл
427 | Если Параметр.Имя = СтруктураОписания.ИмяТекущегоПараметра Тогда
428 | Параметр[ИмяСвойстваПараметра] = Значение;
429 | Прервать;
430 | КонецЕсли;
431 | КонецЦикла;
432 |
433 | КонецПроцедуры
434 |
435 | Процедура ПроверитьДанныеОтвета(НазваниеПроцедуры)
436 |
437 | ПараметрШаблона = "свойство ответа";
438 | ПроверитьДанныеМетода(НазваниеПроцедуры, ПараметрШаблона);
439 | Если Не СтруктураОписания.Свойство("КодТекущегоОтвета") Или
440 | Не ЗначениеЗаполнено(СтруктураОписания.КодТекущегоОтвета) Тогда
441 |
442 | ВызватьИсключение СтрШаблон("%1: нельзя задавать %2 для неопределенного ответа",
443 | НазваниеПроцедуры);
444 | КонецЕсли;
445 |
446 | КонецПроцедуры
447 |
448 | Процедура ПроверитьДанныеТела(НазваниеПроцедуры)
449 |
450 | ПараметрШаблона = "тип тела запроса";
451 | ПроверитьДанныеМетода(НазваниеПроцедуры, ПараметрШаблона);
452 | Если Не СтруктураОписания.ТекущийМетод.Свойство("ТелоЗапроса") Или
453 | Не ТипЗнч(СтруктураОписания.ТекущийМетод.ТелоЗапроса) = Тип("Структура") Тогда
454 |
455 | ВызватьИсключение СтрШаблон("%1: нельзя задавать %2 для неопределенного тела",
456 | НазваниеПроцедуры, ПараметрШаблона);
457 | КонецЕсли;
458 |
459 | КонецПроцедуры
460 |
461 | Процедура ПроверитьДанныеМетода(НазваниеПроцедуры, ПараметрШаблона)
462 |
463 | Если СтруктураОписания = Неопределено Или
464 | Не СтруктураОписания.Свойство("ИмяМетода") Или
465 | ПустаяСтрока(СтруктураОписания.ИмяМетода) Тогда
466 |
467 | ВызватьИсключение СтрШаблон("%1: нельзя задавать %2 для неопределенного метода",
468 | НазваниеПроцедуры, ПараметрШаблона);
469 | КонецЕсли;
470 |
471 | КонецПроцедуры
472 |
473 | #КонецОбласти
474 |
--------------------------------------------------------------------------------
/swagger/DataProcessors/Swag_ПроцессорОписанийОбъектов.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | 5c26a926-3456-4ec2-bc77-359d8d5b047c
7 | 6095f9e8-eb26-4c9e-ae53-f1e4abec9e9c
8 |
9 |
10 | c4fcfa66-fba7-45bd-8401-295f84714f82
11 | 21d85d71-d606-4ca4-95d3-04af3cf54843
12 |
13 |
14 |
15 | Swag_ПроцессорОписанийОбъектов
16 |
17 |
18 | ru
19 | Процессор описаний объектов
20 |
21 |
22 |
23 | true
24 |
25 |
26 | false
27 |
28 |
29 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/swagger/HTTPServices/Swag_Сервис.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Swag_Сервис
6 |
7 |
8 | ru
9 | Swagger сервис
10 |
11 |
12 |
13 | swagger
14 | AutoUse
15 | 20
16 |
17 |
18 |
19 |
20 | SwaggerFile
21 |
22 |
23 | ru
24 | Swagger file
25 |
26 |
27 |
28 | /{File}
29 |
30 |
31 |
32 |
33 | GET
34 |
35 |
36 | ru
37 | GET
38 |
39 |
40 |
41 | GET
42 | SwaggerFileGET
43 |
44 |
45 |
46 |
47 |
48 |
49 |
--------------------------------------------------------------------------------
/swagger/HTTPServices/Swag_Сервис/Ext/Module.bsl:
--------------------------------------------------------------------------------
1 | // Возвращает файлы swagger-ui из соответствующих макетов
2 | //
3 | Функция SwaggerFileGET(Запрос)
4 |
5 | Возврат Swag_Запросы.ПолучитьSwaggerFileGET(Запрос);
6 |
7 | КонецФункции
8 |
--------------------------------------------------------------------------------
/swagger/Languages/Русский.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Adopted
7 | Русский
8 |
9 | ru
10 |
11 |
12 |
--------------------------------------------------------------------------------
/swagger/Roles/Swag_ОсновнаяРоль.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Swag_ОсновнаяРоль
6 |
7 |
8 | ru
9 | Основная роль Swagger
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/swagger/Roles/Swag_ОсновнаяРоль/Ext/Rights.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | true
4 | true
5 | true
6 |
17 |
28 |
35 |
--------------------------------------------------------------------------------