2015-06-19 3 views
10

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

+1

Полезно? https://groups.google.com/forum/#!topic/swagger-swaggersocket/ZGYTzP0DCNM Появляется, что невозможно установить динамически в настоящее время. –

ответ

3

два способа

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

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

+2

В случае, если люди хотят отслеживать статус запроса @ pm100 pull, он находится по адресу https://github.com/swagger-api/swagger-js/pull/510#issuecomment-121776076 – Gillingham

4

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" 
], 

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

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

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

первая часть не соответствует тому, что мне нужно. Я не знаю хозяина в то время, когда я пишу swagger.json. Вторая часть в основном говорит об изменении кода в swagger-js/lib/client.js. Не сказав, что такое мода - на самом деле я это проработал и отправил ссылку на этот файл. – pm100

+0

Предложите удалить этот ответ, поскольку он не касается того, что на самом деле спрашивает OP, как он указывает выше. –

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 с конфигурацией среды разработки.

0

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

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

В последних версиях Swagger UI это можно сделать, например, в OnComplete:

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

1

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

Смежные вопросы