从scala源代码生成Swagger / OpenAPI规范(http4s)

时间:2017-09-21 11:41:29

标签: swagger swagger-2.0 openapi http4s

所以我不是专家,但所有使用swagger的系统都要求您在JSON或YAML中使用swagger规范来定义API的所有端点(等等)。

我的问题是:是否有基于实际源代码生成这些规范文件的方法? 我问,因为似乎很难保留端点代码和当您开始添加属性或返回稍有不同的结果时,文档会同步。

所以当我有这个代码时(使用http4s& RhoService):

object HelloWorld {
  val service = new RhoService {
    GET / "hello" / 'name |>> { name: String =>
      Ok(Json.obj("message" -> Json.fromString(s"Hello, ${name}")))
    }
  }
}

如果它可以产生(以某种方式:)

,那就太好了
/hello/{name}:
    get:
      tags:
      - "HelloWorld"
      summary: ""
      description: ""
      operationId: "getHellobyName"
      produces:         
      - "application/json"
      parameters:
      - name: "name"
        in: "path"
        description: ""
        required: true
        type: "string"
      responses:
        200:
          description: "successful operation"
          schema:
            $ref: "#/definitions/Hello"           
      security:
      - api_key: []

2 个答案:

答案 0 :(得分:1)

没有很好地记录,但显然http4s'RhoService添加了中间件以根据您的路线生成swagger.json

获取bij,调用“http://localhost:8080/swagger.json

Git来源:https://github.com/http4s/rho/blob/0c5aed48aeeea18b1d66d88b58cd3deea733f070/swagger/src/main/scala/org/http4s/rho/swagger/SwaggerSupport.scala#L30

答案 1 :(得分:1)

免责声明:我是tapir的作者。

rho是一种可能性。另一种方法是将API端点的描述与业务逻辑完全分开。

具有端点的描述(这是常规的Scala值),然后可以解释作为服务器(基于“业务逻辑”功能)或文档。

tapirtypeapi是两个可以同时提供http4和OpenAPI解释器的Scala库。