Как я могу легко обслуживать пользовательский интерфейс 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: // локальный: 9000 / активы / Lib / чванство-щ / index.html / URL = HTTP: // локальный: 9000 / API-документы

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

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

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")))
}
Другие вопросы по тегам