1. 程式人生 > WINDOWS開發 >Dataway 整合 Swagger2,讓 API 管理更順暢

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。

<!-- Swagger -->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.7.0</version>
</dependency>
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.7.0</version>
</dependency>

第二步:引入Dataway

在 4.1.8 版本中 Dataway 支援了 Swagger 的文件輸出,我們選用它。

<dependency>
    <groupId>net.hasor</groupId>
    <artifactId>hasor-spring</artifactId>
    <version>4.1.8</version>
</dependency>
<dependency>
    <groupId>net.hasor</groupId>
    <artifactId>hasor-dataway</artifactId>
    <version>4.1.8</version>
</dependency>

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

@DimModule
@Component
public class ExampleModule implements SpringModule {
    @Autowired
    private DataSource dataSource = null; // 應用自己的資料來源

    @Override
    public void loadModule(ApiBinder apiBinder) throws Throwable {
        // .DataSource form Spring boot into Hasor
        apiBinder.installModule(new JdbcModule(Level.Full,this.dataSource)); // 初始化Dataway 的資料來源
        // .custom DataQL
        //
    }

    @Override
    public void onStart(AppContext appContext) throws Throwable {
        //
    }
}

更詳細步驟可以參考《絕了!Dataway讓Spring Boot不再需要Controller、Service、DAO、Mapper》https://my.oschina.net/ta8210/blog/3234639

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

首先新建一個類,在應用中啟用 Swagger

@EnableSwagger2
@Configuration()
public class SwaggerConfig {
    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)//
                .apiInfo(apiInfo())//
                .select()//
                .apis(RequestHandlerSelectors.basePackage("net.example.hasor"))//
                .paths(PathSelectors.any())//
                .build();
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()//
                .title("Spring Boot中使用Swagger2構建RESTful APIs")//
                .description("歡迎到我的GitHub:https://github.com/1610wang/")//
                .termsOfServiceUrl("https://github.com/1610wang/")//
                .contact("wxy").version("1.0")//
                .build();
    }
}

其次利用 Swagger 的介面整合兩個文件到一起

@Component
@Primary
public class SwaggerProvider implements SwaggerResourcesProvider {
    @Override
    public List<SwaggerResource> get() {
        List<SwaggerResource> resources = new ArrayList<>();
        resources.add(swaggerResource("應用介面","/v2/api-docs","1.0"));
        resources.add(swaggerResource("Dataway介面","/interface-ui/api/docs/swagger2.json","1.0"));
        return resources;
    }

    private SwaggerResource swaggerResource(String name,String location,String version) {
        SwaggerResource swaggerResource = new SwaggerResource();
        swaggerResource.setName(name);
        swaggerResource.setLocation(location);
        swaggerResource.setSwaggerVersion(version);
        return swaggerResource;
    }
}

最後啟動應用,首先輸入 Swagger-UI 看到的是應用自身的 API 資訊。由於我們是一個空專案,這裡沒有任何顯示。

技術分享圖片

接著我們切換 Swagger 的文件

技術分享圖片

展開 Default 就可以看到我們配置的介面了。

技術分享圖片

在切換到 Dataway 的UI 中對比一下是不是所有已經發布的 API 都已經在 Swagger 中展示出來了。

技術分享圖片

第五步:用 SwaggerUI 測試Dataway 介面

點開其中一個 Dataway 介面我們嘗試輸入必要的引數測試一下。

技術分享圖片

返回結果

技術分享圖片

注意事項

這是一項新的功能,對於 4.1.8 之前已經在使用的老介面。您需要重新發布一次介面。

否則的話,Dataway 並沒有記錄介面的入參和出參格式,因此也就無法生成一個準確的 Swagger 的介面入參和出參資訊。