Scala Spray + Swagger,如何为API调用自动生成UI

时间:2014-01-13 18:31:22

标签: scala swagger spray

处理项目并使用Spray

想要添加Swagger以获得所有通话的优秀用户界面

找到:

问题是我似乎无法使用我的项目,没有文档或

运行示例就像在黑暗中行走......(并且耗费时间)

任何1人都可以使用它并且有一个

  • 测试示例
  • wiki page
  • 任何有用的东西

所以我能让它运转起来吗?

谢谢!

3 个答案:

答案 0 :(得分:2)

所以我对此进行了尝试并使其正常运行。你可以查看我的回购here

当然,这是我用于探索Spray的暂存器,所以有些事情可能会改变。此外,这是基于Spray 1.3.0。

根据我的理解,让这个工作的一般要点是:

  1. 你有自己的特征/课程;我们称之为“资源”。这些特征/类中的每一个大致对应于“路径”(例如/帖子)
  2. 在您的资源中,您不需要直接使用Spray DSL构建一个大路径,而是需要为每个端点设置一个方法(大致对应于Rails控制器中的“操作”或Sinatra / Scalatra中的路由)。这些方法需要注释。因此,例如,您将有单独的def postCreate,def postDeletes等。然后,这些将需要为您的资源单独组成。
  3. 实例化一个SwaggerHttpService,实现必要的方法(包括1中所有特征/类的序列,以及注释中使用的所有ApiModel的序列)。
  4. 所有路由的组合(跨越您的实际API和SwaggerHttpService)需要传递给包含在runRoute中的中央路由actor的receive方法(这是获取Boot.scala的actor)
  5. 我相信1.和2.是必要的,因为spray-swagger适用于Java注释,当包装在不透明函数内时无法检索(这是Spray路由DSL通常为您编写的)。

答案 1 :(得分:2)

该项目已更新了维基和使用信息!

这看起来很有希望:

https://github.com/gettyimages/spray-swagger

尚未尝试但看起来不错!

答案 2 :(得分:1)

我担心的一个问题是,注释使注释更难以阅读。关于如何使代码可读的任何想法&仍然可以获得Swagger的好处吗?

    @Api(value = "/pet", description = "Operations about pets")
trait PetHttpService extends HttpService {

  @ApiOperation(httpMethod = "GET", response = classOf[Pet], value = "Returns a pet based on ID")
  @ApiImplicitParams(Array(
      new ApiImplicitParam(name = "petId", required = false, dataType = "integer", paramType = "path", value = "ID of pet that needs to be fetched")
        ))
  @ApiResponses(Array(
    new ApiResponse(code = 400, message = "Invalid ID Supplied"),
    new ApiResponse(code = 404, message = "Pet not found")))
  def petGetRoute = get { path("pet" / IntNumber) { petId =>
    complete(s"Hello, I'm pet ${petId}!")
    } }
}

我打算用注释创建一个特征&扩展以查看注释是否有效。会让你们知道会发生什么!