代码之家  ›  专栏  ›  技术社区  ›  Mateusz Kubuszok

Generare大摇大摆。构建期间来自注释的json

  •  0
  • Mateusz Kubuszok  · 技术社区  · 6 年前

    我有一个Scala应用程序 Swagger Akka HTTP 用于生成昂首阔步。json在我的项目中。这是可行的,但我有一些问题:

    • 据我所知,它使用运行时反射,在我的项目中唯一依赖它的地方
    • 因此,这是阻止我使用GraalVM的本机映像的原因之一(当我运行本机映像时,它只会中断)
    • 它引入了许多其他地方没有使用的依赖项(例如Jackson序列化-我使用Circe和Jaws来处理JSON)

    我正在寻找一种让人大摇大摆的方法。构建期间的json文件,例如作为SBT任务,我可以在更新路由时运行该任务。

    我已经看到了 sbt-swagger 但它已经两年没有更新了,所以我不会在sbt 1+上运行。

    是否有我遗漏的脚本、GIST或文档?理想情况下,我希望能够为Swagger注释处理器提供一个包前缀,让它扫描类文件并将文件输出到指定的位置。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Mateusz Kubuszok    6 年前

    由于缺乏更好的选择,我写了自己的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)),
      ...
    )
    

    这并不完美,但总比什么都没有好。

    其他值得考虑的是框架,如 endpoints 或从生成Akka HTTP 大摇大摆json (但您必须手动维护此文件)。