Дисплей Swagger UI на Flask без каких-либо подключений - PullRequest
1 голос
/ 17 апреля 2019

Кто-нибудь знает, как я могу подать файл фляги UI .yml на колбу без создания или подключения API? Я просто хочу показать файл swagger на веб-сайте, чтобы люди могли видеть, как использовать API, но я не хочу создавать API или что-либо подключать, потому что API является закрытым, поэтому его нельзя вызывать в любом случае.

API от AWS API Gateway, поэтому я ничего не могу подключить с помощью фляги.

Я посмотрел на connexion , но мне нужно подключить свои методы API, чтобы использовать его, который не будет работать.

Я могу использовать редактор openapi для преобразования спецификации api в html, а затем использовать html, но я хочу попробовать использовать хороший макет, который предоставляет пользовательский интерфейс swagger.

Ответы [ 2 ]

3 голосов
/ 17 апреля 2019

Swagger имеет опубликованный пример в папке dist проекта.

Комплекты JavaScript, готовые для браузера, доступны в unpkg или напрямую через cloudflare CDN и может обслуживаться непосредственно оттуда.

В вашем случае вы можете написать файл шаблона, аналогичный файлу index.html, в папке dist без настройки дополнительного процесса сборки дляКомплект Swagger UI для вашего проекта колбы.

Ваш шаблон будет выглядеть следующим образом, когда вы замените значение для url URL-адресом файла yaml, содержащего определение API:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <script src="//unpkg.com/swagger-ui-dist@3/swagger-ui-standalone-preset.js"></script>
    <!-- <script src="https://cdnjs.cloudflare.com/ajax/libs/swagger-ui/3.22.1/swagger-ui-standalone-preset.js"></script> -->
    <script src="//unpkg.com/swagger-ui-dist@3/swagger-ui-bundle.js"></script>
    <!-- <script src="https://cdnjs.cloudflare.com/ajax/libs/swagger-ui/3.22.1/swagger-ui-bundle.js"></script> -->
    <link rel="stylesheet" href="//unpkg.com/swagger-ui-dist@3/swagger-ui.css" />
    <!-- <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/swagger-ui/3.22.1/swagger-ui.css" /> -->
    <title>Swagger</title>
</head>
<body>
    <div id="swagger-ui"></div>
    <script>
        window.onload = function() {
          SwaggerUIBundle({
            url: "https://petstore.swagger.io/v2/swagger.yaml",
            dom_id: '#swagger-ui',
            presets: [
              SwaggerUIBundle.presets.apis,
              SwaggerUIStandalonePreset
            ],
            layout: "StandaloneLayout"
          })
        }
    </script>
</body>
</html>
3 голосов
/ 17 апреля 2019

Вы можете использовать Swagger UI npm package , который публикует пакет JavaScript, который можно использовать с документом спецификации.

Возможно, вам придется выполнить некоторые незначительные манипуляции, загрузив спецификациюфайл в объект пользовательского интерфейса.

Редактировать

Я нашел код для того, когда я сделал что-то точно так же.Я создал файл JavaScript, который загружал бы спецификацию с сервера и отображал ее с пакетом SwaggerUI, заменяя указанный HTML-тег.При этом также использовалась библиотека для анализа YAML в JSON.

Я использовал веб-пакет для объединения всего, но вы могли потенциально использовать другой веб-упаковщик.

JavaScript: index.js

const jsYAML = require('js-yaml');
const SwaggerUI = require('swagger-ui');

function httpGetAsync(url, callback) {
    let xmlHttp = new XMLHttpRequest();

    xmlHttp.onreadystatechange = function () {
        if (xmlHttp.readyState === 4 && xmlHttp.status === 200)
            callback(xmlHttp.responseText);
    };

    xmlHttp.open("GET", url, true);
    xmlHttp.send(null);
}

function parseYamlSpec(yaml) {
    try {
        return jsYAML.safeLoad(yaml);
    } catch (error) {
        console.error('Error parsing OpenAPI YAML to JavaScript object');
        console.error(error);
        return null;
    }
}

function displayOpenApiSpec() {
    httpGetAsync('./openapi.yaml', function (yamlSpec) {
        SwaggerUI({
            dom_id: '#openapi',
            spec: parseYamlSpec(yamlSpec)
        })
    });
}

displayOpenApiSpec();

HTML

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Swagger Doc</title>
    <link rel="stylesheet" type="text/css" href="swagger-ui.css"/>
</head>
<body>
    <div id="openapi"></div>
    <script src="bundle.js"></script>
</body>
</html>

Я также взял CSS-файл из пакета SwaggerUI и тоже его обслуживал.Это необходимо, чтобы он выглядел красиво и функционально.

Редактировать 2

package.json

{
  "name": "sdk",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "build": "webpack"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "js-yaml": "^3.12.0",
    "swagger-ui": "^3.20.2"
  },
  "devDependencies": {
    "webpack": "^4.27.1",
    "webpack-cli": "^3.1.2"
  }
}

webpack.config.js

const path = require('path');

module.exports = {
    entry: './index.js',
    output: {
        path: path.resolve(__dirname),
        filename: 'bundle.js'
    }
};

Учитывая, что у вас установлены Node.js и npm, вы можете использовать указанные выше файлы package.json и webpack.config.js и запустить следующие двакоманды из рабочего каталога:

npm install
npm build

Что это делает

По сути, вы хотите предоставить файл HTML, пакет JavaScript и таблицу стилей CSS, которые будут работать для загрузки вашего SwaggerСпецификация в DOM, стилизовать его и использовать библиотеку SwaggerUI, чтобы сделать его интерактивным.

С данным файлом JavaScript это не будет работать в браузере, поскольку он использует Node.js стиль require для импортадве необходимые библиотеки.Но веб-пакет сможет заменить их действующими библиотеками JavaScript и «минимизировать» код, чтобы он уменьшился в размере.

Для этого вам необходимо установить все эти библиотеки.(используя npm, Node Package Manager), а также веб-пакет (вместе с его интерфейсом командной строки), а затем запустите веб-пакет, чтобы он собрал все для вас.

Файл package.jsonперечисляет все эти необходимые библиотеки плюс webpack и определяет «скрипт» для запуска команды webpack.Запустив npm install, npm установит все для вас в локальную папку с именем node_modules.

Затем, запустив npm build, Node.js выполнит команду webpack, которая выполнит всесвязывание и создание выходного файла bundle.js (на который есть ссылка в HTML-файле выше).

Как только все это будет сделано, вы можете добавить index.html, bundle.js, swagger-ui.css (который яскопировано из каталога SwaggerUI в node_modules) и ваша спецификация Swagger в ваши общедоступные файлы на вашем сервере.

...