Создайте документ Swagger для существующего сервера NodeJS

Согласно веб-сайту Swagger, существует два подхода: "снизу вверх" и "сверху вниз".

У меня есть существующий сервер NodeJS, который я хотел бы развернуть в среде Azure, для которого требуется документ swagger (приложение API).

Кто-нибудь знает инструмент для создания чванства с использованием кода? Еще лучше, если бы вы могли указать учебник. Я не мог найти его.


person Ernani    schedule 05.11.2015    source источник
comment
На какой платформе построен ваш сервер Nodejs? Если это Express, вы можете обратиться к github.com/shawngong/Swagger- Node-Express-For-Existing-API. Чтобы развернуть приложение Nodejs в Azure Web Apps, см. azure.microsoft.com/en-us/documentation/articles/   -  person Gary Liu    schedule 05.11.2015
comment
@GaryLiu-MSFT да, я использовал экспресс. Я попробовал этот проект, который вы прислали, но я не мог его понять. В туториале говорится подготовить все, и, кстати, много кода, а потом не сказано, что делать, чтобы сгенерировать документ чванства....   -  person Ernani    schedule 05.11.2015
comment
Я думаю, вы можете сначала следовать пошаговому руководству, чтобы сначала создать документ swagger, или вы могли бы сказать мне, какой шаг блокирует вас?   -  person Gary Liu    schedule 06.11.2015
comment
Может быть, вам нужно что-то вроде этого? mherman.org/blog/2016/05/26/ swagger-and-nodejs/#.WZ7LQCgjHIU В соответствии с этим вы можете использовать модуль 'swagger-jsdoc' для создания документа swagger из вашего проекта.   -  person Margarita Krivorot    schedule 24.08.2017


Ответы (5)


Несложно интегрировать Swagger в существующие экспресс-приложения, следуя этому руководству. .

Как правило, мы можем выполнить следующие шаги:

  1. Добавьте зависимости в наш package.json и запустите npm install, чтобы установить их. Зависимости должны быть:

    "dependencies": {
            "swagger-node-express": "~2.0",
            "minimist": "*",
            "body-parser": "1.9.x",
            ...
    }
    
  2. Загрузите zip-проект Swagger-UI, скопируйте папку dist в корневой каталог нашего проект, каталог должен выглядеть примерно так:

введите описание изображения здесь

  1. Введите зависимости в начале app.js:

    var argv = require('minimist')(process.argv.slice(2));
    var swagger = require("swagger-node-express");
    var bodyParser = require( 'body-parser' );
    
  2. Настройте подпуть для документа swagger:

    var subpath = express();
    app.use(bodyParser());
    app.use("/v1", subpath);
    swagger.setAppHandler(subpath);
    
  3. Убедитесь, что /dist может обслуживать статические файлы в режиме экспресс: app.use(express.static('dist'));

  4. Установите информацию для API:

    swagger.setApiInfo({
        title: "example API",
        description: "API to do something, manage something...",
        termsOfServiceUrl: "",
        contact: "[email protected]",
        license: "",
        licenseUrl: ""
    });
    
  5. Введите /dist/index.html для пользовательского интерфейса swagger:

    subpath.get('/', function (req, res) {
        res.sendfile(__dirname + '/dist/index.html');
    });
    
  6. Завершите конфигурации чванства:

    swagger.configureSwaggerPaths('', 'api-docs', '');
    
    var domain = 'localhost';
    if(argv.domain !== undefined)
        domain = argv.domain;
    else
        console.log('No --domain=xxx specified, taking default hostname "localhost".');
    var applicationUrl = 'http://' + domain;
    swagger.configure(applicationUrl, '1.0.0');
    
  7. Настройте зависимость файла документа в /dist/index.html:

    if (url && url.length > 1) {
        url = decodeURIComponent(url[1]);
    } else {
        <del>url = "http://petstore.swagger.io/v2/swagger.json";</del>
        url = "/api-docs.json";
    }
    
  8. Создайте файл api-docs.json с информацией о ваших API, поместите его в папку dist.

Запустите приложение Express локально, посетите http://localhost:3000/v1, мы можем проверить документ swagger.

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

person Gary Liu    schedule 06.11.2015
comment
Это ничего не генерирует. Он просто обслуживает swaggerUI вместе с приложением? - person Tony Gutierrez; 27.06.2016
comment
Я сгенерировал простой файл swagger.json из трех экспресс-приложений для импорта в приложение Postman через npmjs.com. /package/express-swagger-export пакет. Делал для себя, но может кому пригодится. - person Vlad Tsepelev; 27.11.2016
comment
Будет ли Swagger Editor работать с этим после swagger project editor? - person ; 10.07.2017
comment
Понизьте голос, потому что он не генерируется, это ручная работа, и это не сложно. - person Елин Й.; 23.08.2019

Вопрос немного староват, но все же. Можно полностью автоматически сгенерировать спецификацию Swagger (OpenAPI), просто внедрив промежуточное программное обеспечение для анализа, например: https://github.com/mpashkovsky/express-oas-generator

const express = require('express');    
const expressOasGenerator = require('express-oas-generator');
let app = express();
expressOasGenerator.init(app, {});

запустите некоторые тесты клиента или REST API для вашей службы и откройте http://host:port/api-docs

person mpashkovskiy    schedule 16.12.2017
comment
Привет, спасибо за информацию, я также использую экспресс-oas-генератор, чтобы документация по API работала, но в ответ он не будет обновляться в пользовательском интерфейсе, иногда он обновляется, и вы не можете помочь исправить эти проблемы - person s.chandran sha; 12.07.2019
comment
конечно, могу я попросить вас создать задачу и подробно описать проблему здесь: github. com/mpashkovsky/express-oas-generator/issues ? - person mpashkovskiy; 13.07.2019

Многие разработчики до сих пор сталкиваются с этой проблемой, поэтому я создал инструмент с открытым исходным кодом, чтобы помочь — этот инструмент чем-то похож на Git для API. Он работает, запуская прокси-сервер, пока вы разрабатываете API, анализируете трафик и обновляете спецификацию для вас по мере изменения поведения API. Надеюсь, рабочий процесс сэкономит вам много времени: https://github.com/opticdev/optic

person centree    schedule 19.11.2019

Насколько мне известно, ваши варианты:

  1. Использование swagger-node-express, что, на мой взгляд, очень громоздко.
  2. Написание документа swagger вручную с помощью редактора swagger, как предлагается в этом ТАК ответ

Если вы выберете вариант 2, вы можете использовать swagger-ui-express для сгенерировать swagger-ui

person Ahmad Abdelghany    schedule 02.11.2017

Для большинства альтернатив требуется какая-то спецификация API через Json, Yaml или даже встроенная в JSdocs. С другой стороны, есть некоторые анализаторы времени выполнения, перехватывающие HTTP-запросы и создающие эту спецификацию по требованию.

express-sitemap-html использует другой подход к проверке экспресс-объекта и его маршрутов. во время настройки. Таким образом, он всегда предоставляет актуальный пользовательский интерфейс swagger для установленных маршрутов в существующем экспресс-экземпляре.

const sitemap = require('express-sitemap-html')
...
sitemap.swagger('Title', app) // app is an express instance

Затем получите пользовательский интерфейс swagger из вашего домена /api-docs.

person Miguel Gamboa    schedule 04.01.2021