Из-за отсутствия лучшего варианта я написал свой собственный sbt: sbt-swagger-2 .
Вы добавляете его к plugins.sbt
addSbtPlugin("io.scalaland" % "sbt-swagger-2" % sbtSwagger2Version)
и затем вы определяете, как генерировать каждый swagger.json
файл
// API v1
swaggerOutputs += Swagger.Output(
inputFilter = clazz => Set(
"backend.healthcheck",
"backend.auth",
"backend.api.v1"
).exists(prefix => clazz.getName.startsWith(prefix)),
output = (Compile / classDirectory).value / "docs" / "v1" / "swagger.json",
host = "http://localhost",
schemes = List(Swagger.Scheme.HTTP, Swagger.Scheme.HTTPS),
securitySchemeDefinitions = Map("token" -> new Swagger.OAuth2Definition().password("/auth")),
info = Swagger.Info(
title = "Backend API v1",
version = version.value,
description = """V1 API description""".stripMargin
)
)
// API v2
swaggerOutputs += Swagger.Output(
inputFilter = clazz => Set(
"backend.healthcheck",
"backend.auth",
"backend.api.v2"
).exists(prefix => clazz.getName.startsWith(prefix)),
...
)
Это не идеально, но лучше, чем ничего.
Другими вещами, которые стоит рассмотреть, являются фреймворки, такие как конечные точки или генерирование Akka HTTP из swagger.json
(но тогда вам придется поддерживать этот файл вручную).