【问题标题】:Auto generation of rest endpoints using swagger for Java使用 swagger for Java 自动生成休息端点
【发布时间】:2016-09-20 17:14:23
【问题描述】:

我的任务是为使用 jaxrs 开发的大型 API 寻找最佳方法,以便为第三方记录。该代码目前已使用 javadoc 进行了详细记录。我的问题是帮助确定基于我迄今为止的研究的最佳方法,并验证我们是否走在正确的道路上,所以我正在寻找输入、cmets 或其他框架来查看。我确信这是一个常见的用例,其他人也会遇到类似的问题,并且非常感谢其他有招摇和文档经验的人提供的任何意见。

我们的要求是:

  • 我们没有大量的注释使代码混乱。
  • 我们可以记录返回类型,例如嵌套对象及其正确的 JSON 结构。
  • 我们可以指定标题、链接和元信息(这意味着我们需要 swagger 2.0 而不是 1.2)
  • 我们希望尽可能减少时间和成本,但仍保留高质量的文档。
  • 适用于 JDK 8。

我考虑了以下框架,但每个框架似乎都有一些主要缺点,要么使它们难以使用(对于这个项目),要么我可能误解了。

Swagger JAXRS doclet:Link

这个 maven 插件在构建时工作,能够为我们提供基于现有 javadoc cmets 的合理文档。 However, it does not support Swagger 2.0 这可能会限制在响应中描述标题,这对我们的用例至关重要。它能够在不需要 swagger maven 插件所需的 @Api 或 @ApiOperation 注释的情况下获取其余服务。升级它以使用 swagger 2.0 可能是一项艰巨的任务。

Swagger Maven 插件:Link

插件在构建时基于注释而不是 cmets 创建 swagger 文档。这需要我们遍历整个项目并使用@Api 和@ApiOperation 进行注释。我们可能会避免一些仅在基类上的注释,但是对于端点的任何描述或标题,我们将需要在注释本身中添加详细信息。其中许多注解似乎是重复的,例如我们已经有了@Get 或@Post,但还需要添加@ApiOperation 并描述已经在javadoc 中描述的参数。缺点是这需要时间,而且还会导致代码看起来非常混乱。

Swagger 核心:Link

Swagger 核心在运行时工作,这意味着我们无法从现有的 javadoc 中剥离 cmets。它很容易扩展,就像 Swagger Maven 插件一样,我们可以添加自己的阅读器或规则来添加链接和元信息(或使用我们自己现有的注释)。缺点是每个方法的描述都需要来自某个地方,因此必须在(更多)注释中添加这些注释,这些注释在添加新代码时可能会被遗忘。

发音:Link

Enunciate 对我们不起作用,因为我们需要能够在 .NET 上使用类似的框架,而且它也不支持 JDK 8(目前)。

到目前为止我的结论

到目前为止,swagger jaxrs doclet 是最接近我们想要的一切。主要问题是缺乏 swagger 2.0。我们需要能够相应地更新 swagger 版本,因为将一起记录的其他项目(不同语言)会这样做。对我们来说第二好的是 Swagger Maven 插件,就像使用自定义运行器一样,因为这是构建时间,应该可以以某种方式访问​​现有的 javadoc cmets 并将它们添加到生成的 swagger 中 - 我们可能会侥幸逃脱一些注释在基类上,并使用我们的自定义阅读器从 cmets 中提取其余的(例如描述)。最后,swagger 核心并不能真正满足我们的需求,因为我们需要更多的注释来复制现有的 javadoc。

由于更新 swagger doclet 以支持 swagger 2.0 所需的时间未知,我倾向于使用自定义阅读器的 swagger maven 插件(有关如何从其中读取 javadoc cmets 的任何提示都会很有用!)。是否有任何我遗漏的框架或细节导致我的结论不准确?

【问题讨论】:

  • 如果您使用 Spring,Springfox (springfox.github.io/springfox/docs/current) 也是一个选项。
  • 谢谢 - 不幸的是,现在不是春天,但无论如何都投给你一票,因为下一个查看这个问题的人可能是。

标签: java javadoc swagger swagger-2.0 swagger-maven-plugin


【解决方案1】:

每个人都有自己的需求,所以我不会介绍建议的方法来做你所追求的。但是您绝对可以通过创建自定义解析器来扩展 swagger-maven-plugin 项目,该解析器将通过 SPI 进行检测。

这不是一项微不足道的任务,但如果这是您所倾向于的,那么有 基础设施可以支持它。请看这里:https://github.com/swagger-api/swagger-parser#extensions

【讨论】:

    猜你喜欢
    • 2018-07-06
    • 1970-01-01
    • 2015-11-25
    • 2022-10-05
    • 2016-03-28
    • 1970-01-01
    • 2018-02-28
    • 2020-10-29
    • 1970-01-01
    相关资源
    最近更新 更多