Dubbo微服务基于swagger自动生成文档及测试调用

swagger简介

swagger官方对其软件定位于API构建工具。
它本身包含的功能很多,官方给出的功能特点有:
API设计: 可以使用swagger提供的编辑工具,开发API的接口申明。
构建工具: 并通过反向工程生成各语言API接口的脚手架代码。
文档工具: 可以通过swagger的规范将代码中的注释生成格式化文档。
测试工具: 可以通过使用swagger-ui工具,直接调用基于swagger规范开发的API接口进行测试。
更多内容请访问官网了解 [https://swagger.io/]。

微服务基于swagger自动生成文档原理

在微服务中通过引入swagger核心基础组件,使用swagger的注解在微服务的接口和使用的模型上添加API规范说明。
接口说明

@Deprecated
@Api(value = "XX平台服务适配接口")
public interface MidSysServiceV2 {
    /**
     * xx接口
     *
     * @param channel
     *            调用渠道
     * @param mainRiskCode
     *            主险code
     * @param riskNo
     *            保单号
     * @param midSysOrderNo
     *            投保时的核心订单号
     */
    @ApiOperation(value = "撤单接口", notes = "")
    public DubboResultV1 doOrderCancel(
            @ApiParam(name = "channel", value = "调用渠道", required = true) SourceChannel channel,
            @ApiParam(name = "mainRiskCode", value = "主险编码", required = true) String mainRiskCode, 
            @ApiParam(name = "riskNo", value = "保单号", required = true) String riskNo,
            @ApiParam(name = "midSysOrderNo", value = "投保时的核心订单号", required = true) String midSysOrderNo);

模型说明

@ApiModel(value="SourceChannel",description="渠道对象")
public enum SourceChannel {
    HXCP("hxcx", "小程序"),
    HXYD("hxyd", "移动官网"),
    HXGW("hxgw", "PC官网"),
    HXJDT("hxjdt", "经代通");
    
    @ApiModelProperty(value = "渠道编码", name = "code", example = "hxjdt")
    private String code;
    @ApiModelProperty(value = "渠道描述", name = "descript", example = "经代通")
    private String descript;

在微服务启动的时候,dubbo-swagger组件通过遍历工作中dubbo的实现类。
通过反射机制获取swagger的注解信息,将注释信息生成为基于json格式的元数据信息。

{"swagger":"2.0","info":{"version":"","title":"hxjk-haioums-provider-dev","contact":{"name":"yidonghulian-dev"}},"basePath":"/","paths":{"/h/com.ab.hxjk.haioums.dubbo.api.MidSysServiceV2/doNoCardPay":{"post":{"tags":["MidSysServiceV2"],"summary":"无卡支付接口","description":"DubboResultV1 
......

并且还为dubbo接口生成了REST风格的api,代理微服务的访问。

Mapped "{[/h/{interfaceClass}/{methodName}],produces=[application/json;charset=utf-8]}" onto public org.springframework.http.ResponseEntity com.deepoove.swagger.dubbo.web.DubboHttpController.invokeDubbo(java.lang.String,java.lang.String,javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) throws java.lang.Exception

大概流程就是引入的组件中有一个controller类,将REST请求中的json参数,转换为对应的POJO模型对象,并通过dubbo服务的消费方连接到自己提供的服务提供方,产生服务调用。

配置

首先在微服务接口工程中引入swagger的核心包。

        
            io.swagger
            swagger-core
            1.5.16
               

为API接口及模型添加注解

常用注解有:

- @Api()用于类; 
表示标识这个类是swagger的资源 
- @ApiOperation()用于方法; 
表示一个http请求的操作 
- @ApiParam()用于方法,参数,字段说明; 
表示对参数的添加元数据(说明或是否必填等) 
- @ApiModel()用于类 
表示对类进行说明,用于参数用实体类接收 
- @ApiModelProperty()用于方法,字段 
表示对model属性的说明或者数据操作更改 
- @ApiIgnore()用于类,方法,方法参数 
表示这个方法或者类被忽略 
- @ApiImplicitParam() 用于方法 
表示单独的请求参数 
- @ApiImplicitParams() 用于方法,包含多个 @ApiImplicitParam

在微服务接口实现工程中引入swagger-dubbo包

        
            com.deepoove
            swagger-dubbo
            2.0.1
               

并在工程中添加对组件的配置(因为工程是springboot,所以是基于配置类来实现的配置。)

@DubboComponentScan(basePackages = { "com.ab.hxjk.haioums.dubbo" })  //dubbo实现类的路径
@EnableDubboSwagger //生成api-docs及调用的REST接口
@Configuration
public class SwaggerConfig {

}

*备注:如果需要通过swagger-ui工程调用微服务工程swagger的REST接口,需要申请工程支付跨域调用 。

@Configuration
public class CorsConfig {
    @Bean
    public FilterRegistrationBean corsFilter() {
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        CorsConfiguration config = new CorsConfiguration();
        config.setAllowCredentials(true);
        // 设置你要允许的网站域名,如果全允许则设为 *
        config.addAllowedOrigin("*");
        // 如果要限制 HEADER 或 METHOD 请自行更改
        config.addAllowedHeader("*");
        config.addAllowedMethod("*");
        source.registerCorsConfiguration("/**", config);
        FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter(source));
        // 这个顺序很重要哦,为避免麻烦请设置在最前
        bean.setOrder(0);
        return bean;
    }
}

工程启动以后就可以访问swagger的REST接口了。

可以通过相对路径/swagger-dubbo/api-docs获取API的元数据信息。
也可以通过相对路径/h/{DUBBO_SERVICE_INTERFACE_FULLPACKAGE_PATH}/{DUBBO_SERVICE_INTERFACE_METHOD}调用微服务。

配置swagger-ui

可以通过docker的现成镜像swaggerapi/swagger-ui [https://hub.docker.com/r/swaggerapi/swagger-ui/]运行swagger-ui客户端,或是通过下载工程[https://codeload.github.com/Sayi/swagger-dubbo/zip/master],将工程中的子项目swagger-dubbo-master\swagger-dubbo-example\dubbo-provider-springboot进行修改使用。该工程我已经重构提交到http://gitlab.ab.com/JKX/HXYDHL/microservices/tree/master/swagger-dubbo-ui上了。
下面是运行界面:
可以通过在swagger-ui的首页中访问微服务REST接口/api-docs,获取接口API信息。

Dubbo微服务基于swagger自动生成文档及测试调用_第1张图片
swagger-dubbo-images1.png

也可以通过/api-docs返回的结果对微服务进行调用。
Dubbo微服务基于swagger自动生成文档及测试调用_第2张图片
swagger-dubbo-images2.png

你可能感兴趣的:(Dubbo微服务基于swagger自动生成文档及测试调用)