Как я могу легко обслуживать пользовательский интерфейс Swagger в корне моего микросервиса Scala Play2?

Я разрабатываю микросервис с помощью Scala и Play 2.5 и пытаюсь документировать свои конечные точки с помощью Swagger.

Я добавил веб-баннер Swagger UI в свои зависимости:

"org.webjars" % "swagger-ui" % "2.1.8-M1"

И плагин Swagger Play2:

"io.swagger" %% "swagger-play2" % "1.5.3"

Примечание. Версия 1.5.3 плагина Swagger Play2 официально еще не выпущена. Я создал его из основной ветки проекта, потому что это единственная версия, которая может работать с Play 2.5.8, которую я использую.

Затем я добавил в свой файл маршрутов следующее:

GET         /assets/*file                   controllers.Assets.at(path="/public", file)
GET         /api-docs                       controllers.ApiHelpController.getResources

Таким образом, я могу получить доступ к пользовательскому интерфейсу Swagger через:

http://localhost:9000/assets/lib/swagger-ui/index.html?/url=http://localhost:9000/api-docs

Однако это огромный URL. Я хочу упростить его до чего-то такого же простого, как корень (/), но есть следующие проблемы:

  1. Как заставить Play2 динамически передавать параметр url на статическую HTML-страницу? Как я могу сделать так, чтобы хост и порт были настроены на то, что они есть на сервере, где работает служба? Я рассматривал возможность использования controllers.Default.redirect, но не смог найти способ интерполировать хост и порт в строке аргумента.
  2. Как я могу сопоставить / с assets/lib/swagger-ui/index.html и передать аргумент url?

person Gabriel C    schedule 25.10.2016    source источник
comment
Вы пробовали с этим релизом? github.com/swagger-api/swagger-play/issues/   -  person martinscmb    schedule 28.10.2016


Ответы (1)


Вот лучший способ заставить все работать в целом без каких-либо жестко заданных URL-адресов и номеров портов.

  1. Добавьте маршрут для обработки перенаправления

GET /swaggerDocs controller.Application.redirectDocs

  1. Используйте ту же логику, которую вы знаете, но просто используйте относительные URL вместо абсолютных.
def redirectDocs = Action {
    Redirect(url = "/assets/lib/swagger-ui/index.html", queryString = Map("url" -> Seq("/api-docs")))
}
person saheb    schedule 05.04.2017