Генерация документов swagger из интерфейсов typescript

Я использую swager-jsdoc для документирования всех DTO приложения.

Мне было интересно, есть ли способ автоматически генерировать документы swagger из интерфейсов машинописного текста.

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

Ваше здоровье


person Adrian Moisa    schedule 01.12.2018    source источник
comment
Нашел связанный вопрос, но для создания схем мангуста. Было бы неплохо подстрелить двух зайцев одной пулей.   -  person Adrian Moisa    schedule 01.12.2018
comment
Найдено typegoose. Это решает половину проблемы :D Все еще ищу аналог чванства.   -  person Adrian Moisa    schedule 01.12.2018


Ответы (3)


Другим вариантом tsoa является контроллеры маршрутизации + контроллеры маршрутизации-openapi . Основное различие между ними (AFAIK) заключается в том, что tsoa полагается на генерацию кода, тогда как routing-controllers полностью работает во время выполнения. Оба метода имеют свои преимущества: tsoa может, например. использовать более богатые метаданные (например, комментарии к коду), тогда как с routing-controllers мы можем пропустить этап генерации. Моя рекомендация - проверить оба!

Еще один вариант: https://github.com/YousefED/typescript-json-schema, который генерирует схему JSONS из интерфейсов Typescript; после того, как вы определили свои модели в схеме JSON, вы не очень далеки от спецификации OpenAPI.

person Aleksi    schedule 13.08.2019
comment
Имейте в виду, что в настоящее время TSOA не поддерживает ПО промежуточного слоя для конкретных маршрутов. Кроме того, routing-controllers-openapi не кажется таким многофункциональным, как TSOA. - person Nikos; 19.08.2020

Да, вы можете легко создавать документы Swagger и OpenAPI из типов TypeScript, используя tsoa. Файл readme содержит всю информацию об установке, которая вам потребуется, чтобы начать его использовать. Он совместим с экспресс, хапи, коа и другими:

https://github.com/lukeautry/tsoa


(Полная прозрачность: я один из сопровождающих tsoa. ​​Но я был первым потребителем tsoa, ​​и я считаю, что это отличный продукт... поэтому я попросил помочь его поддерживать! :))

person GreeneCreations    schedule 13.08.2019
comment
Почему tsoa в настоящее время не поддерживает промежуточное ПО для конкретных маршрутов. Также есть обходной путь для этой конкретной функции? - person Andrew Miracle; 19.04.2021
comment
Это вопрос, который лучше подходит как проблема github, как запрос функции tsoa. Но краткий ответ — безопасность типов. Спросите нового сопровождающего tsoa в их github, и вы можете получить другой ответ. - person GreeneCreations; 20.04.2021

Другой вариант — использовать https://www.npmjs.com/package/ts-to-openapi для создания схем Swagger из интерфейсов.

Пример: Учитывая приведенный ниже пользовательский интерфейс:

export interface User {
  name: string;
  email: string;
  nickname?: string;
}

В терминале выполните следующую команду:

npx ts-to-openapi -f User.ts -t User >> User.ts

После этого ваш пользователь интерфейса будет обновляться, как показано ниже:

export interface User {
  name: string;
  email: string;
  nickname?: string;
}

/**
 * @swagger
 * components:
 *   schemas:
 *     User:
 *       additionalProperties: false
 *       properties:
 *         email:
 *           type: string
 *         name:
 *           type: string
 *         nickname:
 *           type: string
 *       required:
 *         - name
 *         - email
 *       type: object
 */
person Ricardo Emerson    schedule 13.08.2020