Dataway 整合 Swagger2,让 API 管理更顺畅

Dataway介绍

Dataway 是基于 DataQL 服务聚合能力,为应用提供的一个接口配置工具。使得使用者无需开发任何代码就配置一个满足需求的接口。 整个接口配置、测试、冒烟、发布。一站式都通过 Dataway 提供的 UI 界面完成。UI 会以 Jar 包方式提供并集成到应用中并和应用共享同一个 http 端口,应用无需单独为 Dataway 开辟新的管理端口。

这种内嵌集成方式模式的优点是,可以使得大部分老项目都可以在无侵入的情况下直接应用 Dataway。进而改进老项目的迭代效率,大大减少企业项目研发成本。

Dataway 工具化的提供 DataQL 配置能力。这种研发模式的变革使得,相当多的需求开发场景只需要配置即可完成交付。 从而避免了从数据存取到前端接口之间的一系列开发任务,例如:Mapper、BO、VO、DO、DAO、Service、Controller 统统不在需要。

研发管理中对于开发的 API 通常需要统一管理,在这一令领域比较常用的是 Swagger。它可以通过 注解方式直接将开发的真实 API 形象的进行文档化,并且提供了一个 Swagger-UI 的界面来查阅。除此之外 Swagger-UI 上还可以发起模拟调用,这一功能是在是让开发人员非常舒心。

Dataway 的优势是在于,一些简单的接口或者聚合服务都可以不在需要开发。用过 Interface-UI 就可以配置和管理。在dataway 4.1.8 版本之前,研发管理上开发者需要在两个 UI 上切换来实现接口的测试和查阅。

新的 4.1.8 发布之后补充了这一短板,让 Dataway 上配置的接口可以直接产生 Swagger2 的API 文档。进一步的开发者可以将这个文档整合到应用自身的 API 文档中。统一管理和查阅、使用。

进一步的利用 Swagger 还可以通过 postman 来统一接口的调试、利用 yapi 还可以对接口进行批量的管理和验证。

接下来本文就会引导读者如何在一个 Spring 项目中让 Dataway 和 Swagger 整合起来。

第一步:引入Swagger

整合多个 Swagger 文档需要较高 Swagger 版本的支持,我们这里选用 2.7.0。

1<!-- Swagger --> 2<dependency> 3 <groupId>io.springfox</groupId> 4 <artifactId>springfox-swagger2</artifactId> 5 <version>2.7.0</version> 6</dependency> 7<dependency> 8 <groupId>io.springfox</groupId> 9 <artifactId>springfox-swagger-ui</artifactId> 10 <version>2.7.0</version> 11</dependency>

第二步:引入Dataway

在 4.1.8 版本中 Dataway 支持了 Swagger 的文档输出,我们选用它。

1<dependency> 2 <groupId>net.hasor</groupId> 3 <artifactId>hasor-spring</artifactId> 4 <version>4.1.8</version> 5</dependency> 6<dependency> 7 <groupId>net.hasor</groupId> 8 <artifactId>hasor-dataway</artifactId> 9 <version>4.1.8</version> 10</dependency>

第三步:配置 Dataway 让其可以工作

1@DimModule 2@Component 3public class ExampleModule implements SpringModule { 4 @Autowired 5 private DataSource dataSource = null; // 应用自己的数据源 6 7 @Override 8 public void loadModule(ApiBinder apiBinder) throws Throwable { 9 // .DataSource form Spring boot into Hasor 10 apiBinder.installModule(new JdbcModule(Level.Full, this.dataSource)); // 初始化Dataway 的数据源 11 // .custom DataQL 12 // 13 } 14 15 @Override 16 public void onStart(AppContext appContext) throws Throwable { 17 // 18 } 19}

更详细步骤可以参考《绝了!Dataway让Spring Boot不再需要Controller、Service、DAO、Mapperhttps://my.oschina.net/ta8210/blog/3234639

第四步:整合 Dataway 的 Swagger 文档到一起

首先新建一个类,在应用中启用 Swagger

1@EnableSwagger2 2@Configuration() 3public class SwaggerConfig { 4 @Bean 5 public Docket createRestApi() { 6 return new Docket(DocumentationType.SWAGGER_2)// 7 .apiInfo(apiInfo())// 8 .select()// 9 .apis(RequestHandlerSelectors.basePackage("net.example.hasor"))// 10 .paths(PathSelectors.any())// 11 .build(); 12 } 13 14 private ApiInfo apiInfo() { 15 return new ApiInfoBuilder()// 16 .title("Spring Boot中使用Swagger2构建RESTful APIs")// 17 .description("欢迎到我的项目:https://gitee.com/zycgit/hasor")// 18 .termsOfServiceUrl("https://gitee.com/zycgit/hasor")// 19 .contact("zyc").version("1.0")// 20 .build(); 21 } 22}

其次利用 Swagger 的接口整合两个文档到一起

1@Component 2@Primary 3public class SwaggerProvider implements SwaggerResourcesProvider { 4 @Override 5 public List<SwaggerResource> get() { 6 List<SwaggerResource> resources = new ArrayList<>(); 7 resources.add(swaggerResource("应用接口", "/v2/api-docs", "1.0")); 8 resources.add(swaggerResource("Dataway接口", "/interface-ui/api/docs/swagger2.json", "1.0")); 9 return resources; 10 } 11 12 private SwaggerResource swaggerResource(String name, String location, String version) { 13 SwaggerResource swaggerResource = new SwaggerResource(); 14 swaggerResource.setName(name); 15 swaggerResource.setLocation(location); 16 swaggerResource.setSwaggerVersion(version); 17 return swaggerResource; 18 } 19}

最后启动应用,首先输入 Swagger-UI 看到的是应用自身的 API 信息。由于我们是一个空项目,这里没有任何显示。

接着我们切换 Swagger 的文档

展开 Default 就可以看到我们配置的接口了。

在切换到 Dataway 的UI 中对比一下是不是所有已经发布的 API 都已经在 Swagger 中展示出来了。

第五步:用 SwaggerUI 测试Dataway 接口

点开其中一个 Dataway 接口我们尝试输入必要的参数测试一下。

返回结果

注意事项

这是一项新的功能,对于 4.1.8 之前已经在使用的老接口。您需要重新发布一次接口。

否则的话,Dataway 并没有记录接口的入参和出参格式,因此也就无法生成一个准确的 Swagger 的接口入参和出参信息。

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )

SpringBoot自定义序列化的使用方式

场景及需求:项目接入了SpringBoot开发,现在需求是服务端接口返回的字段如果为空,那么自动转为空字符串。例如:\    {        "id":1,        "name":null    },    {        "id":2,        "name":"x