Как я могу легко обслуживать пользовательский интерфейс 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 через:
Тем не менее, это огромный URL. Я хочу упростить его до чего-то столь же простого, как root (/), но есть следующие проблемы:
- Как я могу заставить Play2 динамически передавать
url
параметр для статической HTML-страницы? Как я могу сделать так, чтобы хост и порт были настроены на то, что они находятся на сервере, где работает служба? Я подумал об использованииcontrollers.Default.redirect
, но я не смог найти способ интерполировать хост и порт в строке аргумента. - Как я могу карту
/
вassets/lib/swagger-ui/index.html
и передатьurl
аргумент?
1 ответ
Вот лучший способ сделать так, чтобы все работало в общем, без каких-либо жестко заданных URL-адресов и номеров портов.
- Добавить маршрут для обработки перенаправления
GET /swaggerDocs controller.Application.redirectDocs
- Используйте ту же логику, которую вы знаете, но просто используйте относительные URL-адреса вместо абсолютных.
def redirectDocs = Action {
Redirect(url = "/assets/lib/swagger-ui/index.html", queryString = Map("url" -> Seq("/api-docs")))
}