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