Лучший способ рассказать swaggerui, где хозяин

Когда я создаю свой файл swagger.json, я не знаю, какой хост использовать. Однако я могу это обработать, когда моя страница содержит загрузочные файлы (на самом деле я могу предложить пользователю выбор). Я надеялся увидеть options.host в config для объекта swaggerUI - я его не вижу. Есть ли существующий способ сделать это, что я не могу найти, или просто мне нужно пробить свой путь через код и добавить эту возможность (указатели на лучшее место для этого будут приветствоваться)

Ответ 1

двумя способами

Измените swagger.js так, чтобы он принял параметр хоста. swagger-UI передает параметры swagger-js, так что это работает. Я отправил тягу к swagger-js с этим исправлением.

Второй выбор заключается в том, что swagger-UI принимает параметр "spec". Это означает, что на странице хостинга можно загрузить файл swagger.json, JSON.parse, установить в нем "host", а затем перейти к конструктору swaggerUi. Это сложнее для вызывающего, но не требует изменения кода в swagger

Ответ 2

Swagger имеет встроенное определение json для конфигурации хоста или может принимать несколько входов.

{
    "swagger": "2.0",
    "info": {
        "title": "Why API",
        "description": "Don't make that mistake again",
        "version": "0.0.1"
    },

    "host": "127.0.0.1:3000",
    "schemes": [
        "https"
    ]
}

или

"host": "test.mydomain.com:3000",
"schemes": [
    "https"
],

Или вы можете иметь динамический хост, определяя var и вызывая имя хоста или имя машины или другие переменные среды.

динамический пример

if (typeof this.host === 'undefined' || this.host === '') {
  this.host = location.host;
}
if (location.port) {
  this.host = this.host + ':' + location.port;
}

Ответ 3

Вот что я делаю, поскольку загруженный документ - это просто объект JSON:

var swaggerDoc = require('./api/swagger.json');
if (process.env.NODE_ENV === 'development') {
  swaggerDoc.host="localhost:" + process.env.PORT
}

// Initialize the Swagger middleware
swaggerTools.initializeMiddleware(swaggerDoc, function (middleware) {
  // Other initialization
}

Таким образом, вы не загрязняете свою спецификацию API конфигурацией среды разработки.

Ответ 4

В последних версиях пользовательского интерфейса Swagger это можно сделать, например, в onComplete:

window.swaggerUi.api.setHost("your.host:4242");

Ответ 5

Если вы размещаете его на одном сервере приложений, просто удалите ключ хоста из json и укажите относительный путь в ключе "basePath". в виде - "basePath": "/rest/createcampaign".

Ответ 6

Так я сделал это с помощью клиента Java:

DefaultApi api = new DefaultApi();
api.getApiClient().setBasePath("http://localhost:8080");
//call the API

Ответ 7

если вы используете OpenApi 3.0

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

Swagger Doc

В swagger-ui будет значение по умолчанию, но поле является полем ввода, поэтому его можно настроить во время выполнения.

enter image description here