Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

added Openapi specification visualization to Swagger UI #201

Open
wants to merge 2 commits into
base: develop
Choose a base branch
from

Conversation

denisushakov
Copy link
Contributor

@denisushakov denisushakov commented Feb 5, 2025

Summary by CodeRabbit

  • New Features
    • В систему добавлены новые модули для построения спецификации OpenAPI и документирования REST API.
    • Внедрены шаблоны для отображения страниц, иконок, скриптов и стилей, обеспечивающие интерактивное представление API.
    • Реализованы функции для обработки HTTP-запросов с корректным распределением кодов ответов.
    • Обновлена системная конфигурация и введено новое перечисление типов ответов для улучшения интеграционных сценариев.

@denisushakov denisushakov added the new function Новая функциональность label Feb 5, 2025
@denisushakov denisushakov self-assigned this Feb 5, 2025
@denisushakov denisushakov linked an issue Feb 5, 2025 that may be closed by this pull request
Copy link

coderabbitai bot commented Feb 5, 2025

Walkthrough

Изменения включают внесение мелких корректировок комментариев и обновлений версии, добавление новых XML-файлов для описания метаданных модулей, шаблонов и перечислений, а также появление новых библиотек в модулях для обработки HTTP-запросов, маршрутизации, формирования ответов и сопоставления с REST-статусами. Обновлена конфигурация системы с включением новых компонентов, относящихся к спецификациям OpenAPI и REST.

Changes

Файл/Путь Изменения
src/cf/Catalogs/пбп_ИсторияИнтеграции/Ext/ManagerModule.bsl
src/cf/CommonModules/пбп_ОбновлениеИнформационнойБазыПБП/Ext/Module.bsl
Изменения в комментариях (добавление BOM, незначительное изменение форматирования) и обновление версии (1.0.5.25 → 1.0.6.0).
src/cf/CommonModules/пбп_ПостроительСпецификацииOpenAPI*.xml Добавлены новые XML-файлы для определения метаданных CommonModule: пбп_ПостроительСпецификацииOpenAPI.xml, пбп_ПостроительСпецификацииOpenAPIПереопределяемый.xml, пбп_ПостроительСпецификацииOpenAPIПовтИсп.xml.
src/cf/CommonModules/пбп_ПостроительСпецификацииOpenAPI*/Ext/Module.bsl Добавлены новые экспортируемые функции для обработки HTTP-запросов, маршрутизации, формирования ответов и обработки ошибок в контексте спецификаций OpenAPI.
src/cf/CommonTemplates/СпецификацияИконка16СтраницыREST.xml
src/cf/CommonTemplates/СпецификацияИконка32СтраницыREST.xml
src/cf/CommonTemplates/СпецификацияСкриптыСтраницыREST.xml
src/cf/CommonTemplates/СпецификацияСтилиСтраницыREST.xml
src/cf/CommonTemplates/СпецификацияСтраницаREST.xml
Введены новые XML-файлы для описания метаданных шаблонов REST-страниц и ресурсов.
src/cf/CommonTemplates/СпецификацияСтраницаREST/Ext/Template.txt Добавлен новый HTML-шаблон для страницы спецификации REST с интеграцией Swagger UI.
src/cf/Configuration.xml Обновление версии (1.0.5.25 → 1.0.6.0) и добавление новых записей для CommonModule, CommonTemplate и Enum, связанных с OpenAPI и REST.
src/cf/Enums/пбп_ТипыОтветовREST.xml
src/cf/Enums/пбп_ТипыОтветовREST/Ext/ManagerModule.bsl
Создан новый XML-файл для перечисления типов ответов REST и добавлены функции для сопоставления ответов с HTTP-статусами.
src/cf/Subsystems/пбп_УправлениеИнтеграциями.xml Добавлены новые ссылки (ссылки на CommonModule, CommonTemplate и Enum), расширяющие возможности управления интеграциями.

Sequence Diagram(s)

sequenceDiagram
    participant Клиент
    participant OpenAPI_Module
    participant РесурсХэндлер
    participant ОшибкаОбработчик

    Клиент->>OpenAPI_Module: Отправка запроса спецификации
    OpenAPI_Module->>OpenAPI_Module: ПолучитьОбработчикРесурса(запрос)
    alt Ресурс найден
        OpenAPI_Module->>РесурсХэндлер: Обработка запроса
        РесурсХэндлер-->>OpenAPI_Module: Результат обработки
        OpenAPI_Module-->>Клиент: Возврат спецификации
    else Ресурс не найден
        OpenAPI_Module->>ОшибкаОбработчик: Генерация ошибки
        ОшибкаОбработчик-->>Клиент: Возврат сообщения об ошибке
    end
Loading

Possibly related PRs

  • Add history integration time to thread #199: Изменения в основном PR связаны с модификациями в процедуре ОчиститьИсториюИнтеграции файла ManagerModule.bsl, которая теперь включает поля из директории пбп_ИнтеграционныеПотоки, в то время как извлеченный PR также затрагивает изменения в директории пбп_ИсторияИнтеграции, указывая на прямую связь в функциональности и обработке данных.

Suggested labels

enhancement

Tip

🌐 Web search-backed reviews and chat
  • We have enabled web search-based reviews and chat for all users. This feature allows CodeRabbit to access the latest documentation and information on the web.
  • You can disable this feature by setting web_search: false in the knowledge_base settings.
  • Please share any feedback in the Discord discussion.

📜 Recent review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between fe77fa7 and fc7b9a0.

📒 Files selected for processing (1)
  • src/cf/CommonModules/пбп_ПостроительСпецификацииOpenAPIПовтИсп/Ext/Module.bsl (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • src/cf/CommonModules/пбп_ПостроительСпецификацииOpenAPIПовтИсп/Ext/Module.bsl

Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR. (Beta)
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (3)
src/cf/CommonModules/пбп_ПостроительСпецификацииOpenAPI/Ext/Module.bsl (1)

349-373: Убедиться в корректности извлечения параметра имени сервиса.

Код ПолучитьКлючСервиса(Запрос) (строки 349-373) берёт часть URL, начиная от последнего слэша. Если формат URL может отличаться или содержать дополнительные параметры, стоит проверить корректность обработки, чтобы исключить неверное определение имени сервиса.

src/cf/Enums/пбп_ТипыОтветовREST/Ext/ManagerModule.bsl (1)

6-16: Свести дублирующиеся коды ответов в единый справочник (если потребуется).

Функция ПолучитьПользовательскиеВидыОтветов дублирует некоторые коды, которые могут быть также определены в служебных видах ответов. Если в будущем потребуется расширенное единообразие, рассмотрите идею объединить общие коды или вынести логику в одно место.

src/cf/CommonTemplates/СпецификацияСтраницаREST/Ext/Template.txt (1)

3-8: Добавьте мета-теги для улучшения SEO и поддержки мобильных устройств.

Рекомендуется добавить следующие мета-теги в секцию head для улучшения SEO и корректного отображения на мобильных устройствах.

 <head>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1">
+<meta name="description" content="API Documentation">
 <link rel="icon" type="image/png" href="[Иконка16Ссылка]" sizes="16x16">
📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 1c91c8e and fe77fa7.

⛔ Files ignored due to path filters (2)
  • src/cf/CommonTemplates/СпецификацияИконка16СтраницыREST/Ext/Template.bin is excluded by !**/*.bin
  • src/cf/CommonTemplates/СпецификацияИконка32СтраницыREST/Ext/Template.bin is excluded by !**/*.bin
📒 Files selected for processing (18)
  • src/cf/Catalogs/пбп_ИсторияИнтеграции/Ext/ManagerModule.bsl (1 hunks)
  • src/cf/CommonModules/пбп_ОбновлениеИнформационнойБазыПБП/Ext/Module.bsl (2 hunks)
  • src/cf/CommonModules/пбп_ПостроительСпецификацииOpenAPI.xml (1 hunks)
  • src/cf/CommonModules/пбп_ПостроительСпецификацииOpenAPI/Ext/Module.bsl (1 hunks)
  • src/cf/CommonModules/пбп_ПостроительСпецификацииOpenAPIПереопределяемый.xml (1 hunks)
  • src/cf/CommonModules/пбп_ПостроительСпецификацииOpenAPIПереопределяемый/Ext/Module.bsl (1 hunks)
  • src/cf/CommonModules/пбп_ПостроительСпецификацииOpenAPIПовтИсп.xml (1 hunks)
  • src/cf/CommonModules/пбп_ПостроительСпецификацииOpenAPIПовтИсп/Ext/Module.bsl (1 hunks)
  • src/cf/CommonTemplates/СпецификацияИконка16СтраницыREST.xml (1 hunks)
  • src/cf/CommonTemplates/СпецификацияИконка32СтраницыREST.xml (1 hunks)
  • src/cf/CommonTemplates/СпецификацияСкриптыСтраницыREST.xml (1 hunks)
  • src/cf/CommonTemplates/СпецификацияСтилиСтраницыREST.xml (1 hunks)
  • src/cf/CommonTemplates/СпецификацияСтраницаREST.xml (1 hunks)
  • src/cf/CommonTemplates/СпецификацияСтраницаREST/Ext/Template.txt (1 hunks)
  • src/cf/Configuration.xml (5 hunks)
  • src/cf/Enums/пбп_ТипыОтветовREST.xml (1 hunks)
  • src/cf/Enums/пбп_ТипыОтветовREST/Ext/ManagerModule.bsl (1 hunks)
  • src/cf/Subsystems/пбп_УправлениеИнтеграциями.xml (1 hunks)
✅ Files skipped from review due to trivial changes (9)
  • src/cf/Catalogs/пбп_ИсторияИнтеграции/Ext/ManagerModule.bsl
  • src/cf/CommonTemplates/СпецификацияСтилиСтраницыREST.xml
  • src/cf/CommonTemplates/СпецификацияИконка32СтраницыREST.xml
  • src/cf/CommonTemplates/СпецификацияСтраницаREST.xml
  • src/cf/CommonTemplates/СпецификацияИконка16СтраницыREST.xml
  • src/cf/CommonModules/пбп_ПостроительСпецификацииOpenAPIПереопределяемый.xml
  • src/cf/CommonTemplates/СпецификацияСкриптыСтраницыREST.xml
  • src/cf/CommonModules/пбп_ПостроительСпецификацииOpenAPI.xml
  • src/cf/CommonModules/пбп_ПостроительСпецификацииOpenAPIПовтИсп.xml
🔇 Additional comments (15)
src/cf/CommonModules/пбп_ПостроительСпецификацииOpenAPI/Ext/Module.bsl (3)

32-66: Уточнить безопасность динамического вызова обработчика.

Данный участок кода формирует строку для последующего безопасного вычисления обработчика (ВычислитьВБезопасномРежиме). Однако важно убедиться, что Обработчик не содержит произвольного пользовательского ввода, который может привести к потенциальным уязвимостям. Рекомендуется дополнительно проверить, что имя обработчика берётся только из доверенных источников.


223-235: Проверить логику ответа о состоянии сервиса.

Функция ОбработчикМетодаСостоянияСервиса возвращает статус "pass". Если в будущем потребуется расширять информацию о состоянии сервиса (например, добавлять дополнительные поля), убедитесь, что код обрабатывает возможные изменения без нарушения обратной совместимости.


241-315: Проверьте корректность формирования ошибки и заголовков.

Блок генерации ответа с ошибкой (строки 241-315) формирует JSON с деталями. Убедитесь, что структура данных ошибки (свойство detail) всегда содержит человеку-читаемое пояснение. Также важно, чтобы коды ответа корректно соответствовали перечислениям из пбп_ТипыОтветовREST.

src/cf/Enums/пбп_ТипыОтветовREST/Ext/ManagerModule.bsl (1)

18-31: Уточнить назначение служебных ответов.

Функция ПолучитьСлужебныеВидыОтветов возвращает коды для ситуаций, связанных с аутентификацией, авторизацией и сложными ошибками (422, 500). Убедитесь, что реальный бизнес-процесс корректно обрабатывает эти ответы, а код 422 действительно используется только для валидации или ошибок спецификации, чтобы избежать путаницы.

src/cf/CommonModules/пбп_ПостроительСпецификацииOpenAPIПереопределяемый/Ext/Module.bsl (1)

24-34: Проверить корректность сопоставления сервисов и макетов.

В функции ИменаМакетовСервисов (строки 24-34) создаётся соответствие между именем сервиса и именем макета. Убедитесь, что данные пары являются актуальными для всех сервисов, а в случае отсутствия ключа будет корректно обрабатываться ошибка (например, в связке с функциями из основного модуля).

src/cf/CommonModules/пбп_ОбновлениеИнформационнойБазыПБП/Ext/Module.bsl (1)

77-77: Корректное обновление версии.

Версия обновлена с 1.0.5.25 до 1.0.6.0, что соответствует добавлению функциональности визуализации спецификации OpenAPI.

src/cf/Subsystems/пбп_УправлениеИнтеграциями.xml (1)

59-67: Корректное добавление модулей и шаблонов.

Новые модули и шаблоны для спецификации OpenAPI добавлены структурированно и согласованно с существующей конфигурацией подсистемы управления интеграциями.

src/cf/Enums/пбп_ТипыОтветовREST.xml (4)

1-2: Проверка заголовка и пространств имен.
XML-заголовок и пространство имен заданы корректно и соответствуют требованиям системы.


3-17: Проверка секции InternalInfo.
Раздел InternalInfo содержит корректно сгенерированные типы (EnumRef, EnumManager, EnumList) с уникальными идентификаторами. Убедитесь, что назначенные TypeId и ValueId соответствуют плану использования в системе.


18-93: Проверка секции Properties.
Секция Properties включает подробное описание перечисления: имя, синоним на русском, комментарии и настройки стандартных атрибутов (Order и Ref). Все элементы заполнены корректно, и форматирование соответствует ожиданиям для метаданных данного формата.


94-215: Проверка секции ChildObjects и элементов EnumValue.
Определены все необходимые значения перечисления для REST-ответов (например, «Успешно», «ОшибкаНеКорректныйЗапрос», «ОшибкаНеАвторизован» и т.д.) с уникальными UUID и корректно структурированными свойствами. Рекомендуется проверить, что список EnumValue полностью покрывает все планируемые ответы для API.

src/cf/Configuration.xml (4)

60-60: Обновление версии конфигурации.
Версия изменена на 1.0.6.0, что свидетельствует об обновлении и, возможно, интеграции новых компонентов. Убедитесь, что все связанные модули и зависимости совместимы с данной версией.


280-284: Добавление шаблонов для спецификации REST.
В блоке ChildObjects добавлены новые элементы CommonTemplate:

  • СпецификацияИконка16СтраницыREST
  • СпецификацияИконка32СтраницыREST
  • СпецификацияСкриптыСтраницыREST
  • СпецификацияСтилиСтраницыREST
  • СпецификацияСтраницаREST
    Эти шаблоны, судя по комментариям, предназначены для визуализации спецификации OpenAPI через Swagger UI. Проверьте, что они корректно подключены в систему.

329-331: Добавление модулей для построения спецификации OpenAPI.
Новые CommonModule:

  • пбп_ПостроительСпецификацииOpenAPI
  • пбп_ПостроительСпецификацииOpenAPIПереопределяемый
  • пбп_ПостроительСпецификацииOpenAPIПовтИсп
    добавлены для генерации спецификаций OpenAPI, что соответствует целям данного PR по визуализации спецификации. Рекомендуется убедиться в корректной интеграции этих модулей с Swagger UI.

367-373: Обновление перечня перечислений (Enum).
В разделе Enum наблюдается изменение порядка следующих элементов:

  • пбп_НаправленияИнтеграционныхПотоков
  • пбп_МетодыЗапросаREST
  • пбп_ТипыОтветовREST
    Новый enum пбп_ТипыОтветовREST, описанный в отдельном файле, теперь включён в конфигурацию. Проверьте, что данный порядок соответствует необходимой логике обработки REST-ответов в системе.

Comment on lines 38 to 39
Обработчики.Вставить("/swagger-ui-bundle.js",
"пбп_ПостроительСпецификацииOpenAPI.ОбработчикМетодаСкриптовДокументацииСервиса");
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Удалите дублирующийся обработчик.

Обработчик для /swagger-ui-bundle.js уже определен в строках 34-35. Повторное определение избыточно и может привести к непредсказуемому поведению.

 	Обработчики.Вставить("/swagger-ui-bundle.js",
 		"пбп_ПостроительСпецификацииOpenAPI.ОбработчикМетодаСкриптовДокументацииСервиса");
-	Обработчики.Вставить("/swagger-ui-bundle.js",
-		"пбп_ПостроительСпецификацииOpenAPI.ОбработчикМетодаСкриптовДокументацииСервиса");
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
Обработчики.Вставить("/swagger-ui-bundle.js",
"пбп_ПостроительСпецификацииOpenAPI.ОбработчикМетодаСкриптовДокументацииСервиса");
Обработчики.Вставить("/swagger-ui-bundle.js",
"пбп_ПостроительСпецификацииOpenAPI.ОбработчикМетодаСкриптовДокументацииСервиса");

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
new function Новая функциональность
Projects
None yet
Development

Successfully merging this pull request may close these issues.

вывод спецификации API в Swagger UI
1 participant