@nfjs/back-openapi
ОГЛАВЛЕНИЕ
Используемые понятия
Документ - сформированное описание доступных роутов бэкенда в формате openapi
Swagger - визуальное представление документа в браузере, размещенной с помощью библиотеки swagger-ui-dist
jsdoc - формат описания комментариев для javascript
Назначение
Модуль позволяет при старте приложения собрать openapi документ по yaml файлам и jsdoc комментариям
в подключенных приложением модулях и запустить swagger на основе этого документа по указанному в конфигурации пути.
Принцип работы
Сначала происходит поиск всех файлов предположительно содержащих нужное описание. Это
-
yaml файлы, в которых могут быть куски общего документа. Содержание их должно начинать от корневых понятий спецификации, чаще всего paths,components
-
файлы, в которых присутствуют jsdoc комментарии с тегами @typedef и @openapi. Примеры приведены ниже.
-
файлы с моделями, отнаследованными от @nfjs/back-dbfw/model
Для каждого типа можно задать паттерн для поиска относительно корня приложения и только в подключенных модулях приложения в конфигурации инструмента.
Структуры yaml из файлов и извлечённые из комментариев @openapi приводятся к объектам javascript-а и объединяются слиянием в результирующий документ. Проводится поиск всех $ref ссылок вида '#/components/schemas/ИмяСхемы'
и отсутствующие еще в документе ищутся среди приведенных к формату json-schema типов из комментариев @typedef и моделей бэкенда.
Готовый документ, swagger по этому документу и ошибки возникшие в процессе сбора в зависимости от конфигурации назначается на роуты бэкенда.
-
Пример @openapi комментария
Пример @typedef комментария с поддерживаемыми вариантами описания
Дополнительные json-schema атрибуты свойств объектов задаются в формате: {ИмяСвойства} ИмяАтрибута ЗначениеАтрибута
Если необходимо внести изменения в подговленный документ, то в nf-module.js модуля примерно следующее:
import { container } from "@nfjs/core";
const meta = { require: { after: ['@nfjs/back-openapi'] } };
async function init() {
const doc = container['openapi-doc'];
doc.info.title = 'Новый заголовок';
}
Конфигурация
denySwagger | boolean | Отключить автоматический сбор openapi документа | false |
denyRouteErrors | boolean | Отключить доступ к ошибкам при автоматическом сборе openapi документа | false |
route | String | Относительный адрес, на котором будут доступны swagger, сам документ и ошибки сбора | /@nfjs/back-openapi |
gather | Object | Настройки для сборщика подходящих файлов | |
.yamlPathPattern | String | Паттерн для поиска yaml файлов | **/*.yaml |
.jsdocPathPattern | String | файлов с jsdoc комментариями | **/*.js |
.modelPathPattern | String | моделей бэкенда @nfjs/back-dbfw/model | models/index.js |