当前位置: 首页 > 知识库问答 >
问题:

关于Swagger API的建议

黄沈浪
2023-03-14

我正在使用Java 8构建一个使用SpringBoot和SpringREST服务的API。我刚刚发现了Swagger API,现在我想让我的API与Swagger兼容。

据我所知,Swagger是一个记录您的APIS的工具,而且还提供了从规范(swagger.jsonv2中)生成客户端和服务器代码的功能,以及与您的API交互的漂亮Web界面。

现在,我想要一些关于如何继续的建议,因为我已经有了一个至少有15个控制器的现有应用编程接口。我应该从头开始编写整个规范(swagger.json文件),然后使用代码生成服务器代码(控制器和对象)吗?还是最好用斯瓦格核心注释注释现有控制器,然后从那里生成一个json规范?

第二个选择对我来说更有意义,但我不知道我们如何从现有 API 生成 swagger.json 规范(如果可能的话)。

关于这方面,你能给我一些建议吗?

谢谢

共有2个答案

卞坚成
2023-03-14

我意识到这来得太晚了,但是这里有一个可供您考虑的选择:您可以手写OpenAPI API描述,然后让您的实现在启动时读取它,并相应地自动配置它的URL路由、响应类型等,而不是从您的实现中生成OpenAPI API描述。

即从文档生成实现,而不是从实现生成文档。

我不知道这在Spring有多可行(对不起)。Python和WSGI并不难。

这是不是一个好主意,只有你才能做出判断。

宇文兴言
2023-03-14

只需对现有 REST API 进行少量注释,它就会自动生成整个 Swagger 规范。Swagger绝对是最受欢迎的REST API文档框架之一。

<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.2.2</version>
    <scope>compile</scope>
</dependency>
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.2.2</version>
    <scope>compile</scope>
</dependency>
@Bean
public Docket newsApi() {
    return new Docket(DocumentationType.SWAGGER_2)
            .groupName("springboot")
            .apiInfo(apiInfo())
            .select()
            .paths(regex("/.*"))
            .build();
}
 
private ApiInfo apiInfo() {
    return new ApiInfoBuilder()
            .title("SpringBoot REST API with Swagger")
            .description("SpringBoot REST API with Swagger")
            .termsOfServiceUrl("http://www-03.ibm.com/software/sla/sladb.nsf/sla/bm?Open")
            .contact("sanket**@au1.ibm.com")
            .license("Apache License Version 2.0")
            .licenseUrl("https://github.com/IBM-Bluemix/news-aggregator/blob/master/LICENSE")
            .version("2.0")
            .build();
}

应用程序类的@EnableSwagger2

像这样的东西

@RequestMapping(value = "/operate/add/{left}/{right}", method = RequestMethod.GET, produces = "application/json")
@ApiOperation(value = "addNumbers", nickname = "addNumbers")
@ApiResponses(value = { @ApiResponse(code = 200, message = "Success", response = Result.class),
        @ApiResponse(code = 401, message = "Unauthorized"), 
        @ApiResponse(code = 500, message = "Failure") })
public Result add(@PathVariable("left") int left, @PathVariable("right") int right) {

您完成了。默认情况下包含Swagger UI,您还可以访问JSON格式的swagger规范。访问http://localhost:12001/swagger-ui.html#/

有关详细信息,请参阅此代码库:https://github.com/sanketsw/SpringBoot_REST_API

 类似资料:
  • 我有如下所示的ES文档: 我需要一个搜索(或多个搜索)的以下答案 将来有的文档数(例如>现在) 将来有检查的文档数(例如>现在) 未来7天的日期直方图(日细分),包含当天具有的文档数 未来7天的日期直方图(日细分),包含当天的文档数 所以,我正试图找出如何有效地得到这些答案。我知道我可以/应该测试所有不同的方法,但我对ES相对来说是新手,所以说起来容易做起来难。 有人能给我一个建议(或者理想情况下

  • 问题内容: 我切换到PHP 5.6.0,现在到处都收到以下警告: 很好,我依靠一些不推荐使用的功能。除了 我不知道! 我从未在任何脚本中使用过此变量。老实说,我什至不知道它甚至存在。 显示我已设置为0(禁用)。那么发生了什么? 我不想通过将此值设置为-1来“避免警告”。这只会隐藏警告,而我仍将弃用配置。我想从根本上解决问题,并且知道PHP为什么认为填充已打开。 问题答案: 事实证明,我对错误消息的

  • 我们在spring boot/kotlin微服务中使用Mongock作为主要的Mongo DB迁移工具,它工作得很好。我们从一个简单的json文件开始创建一些集合,现在已经添加了一段时间的变更集。 到目前为止,我们有如此多的变更集,以至于很难看出我们数据库的“真相”。我们没有一个json文件或一堆文件来告诉我们数据库的状态,它是开始json和所有变更集的积累。 我想根据当前情况创建一个新的基线脚本

  • 嘿,所以我为ExecutorService的java文档选择了这个例子。我想确认这个代码的流程,执行者。newFixedThreadPool将创建一个线程池(我猜)。所以serversocket将等待连接,一旦获得连接,就会启动一个线程,所以现在池大小减少1。一旦线程完成执行,池大小将再次增加1,不是吗?线程会放弃它使用的资源吗?

  • 根本原因出现在Jetty HttpClient连接管理或线程管理的底层。通常,Jetty HttpClient会生成一组线程来处理HTTP GET(见下文),这些线程会按照您的预期启动和消失。在大约40小时或操作之后,JDK VisualVM显示至少9个连接线程不会立即消失: HttpClient-计划程序x 1 HttpClient-选择器客户端SeclectorManager x 4 Http

  • 问题内容: 我需要对文件进行压缩和密码保护。是否有一个好的(免费)库? 这需要由第三方打开,因此密码保护需要使用标准工具。 问题答案: 经过大量搜索,我发现了三种方法: 一组免费的源代码,适用于单个文件zip。但是,没有许可证。用法是AesZipOutputStream.zipAndEcrypt(…)。 http://merkert.de/de/info/zipaes/src.zip (https