zoukankan      html  css  js  c++  java
  • 开源API文档工具- swagger2 与 smart-doc 比较 与 使用

    工具开源地址

    swagger2 : https://swagger.io/

    smart-doc: https://www.oschina.net/p/smart-doc  国产

    两者的比较

    swagger2 和 smart-doc 两个开源工具 都可以 使用jar包 生成 api 文档。

    相同点:

    这个两个工具 都可以 自动 扫描 有 @Controller 注解的 类 并生成  相应的 api 接口文档。都可以生成 静态网页,提供在线api html 页面的访问。

    区别:

    1、swagger2相对 功能多一点,它不仅能 生成 文档 ,而且还可以 提供在线测试 api 的页面,方便调试。尤其是post 请求调试,不需要自己写 json 格式请求数据了,只要在对应的请求属性输入对应的值就可以测试了,这个功能比较方便。而 smart-doc 只能生成 文档,格式包含(多种格式文档:Markdown、HTML5、Asciidoctor、Postman json)

    2、设计思路不同,smart-doc 是基于 源码分析的,它生成api文档是通过分析JAVA源码主要是通过 注释 和 系统自带注解,来实现文档的 生成,而 swagger 是运行时 自动生成在线文档,并且 生成 测试 接口的 案例。由于他们设计思路 理念 不一样,swagger2 使用过程需要使用它定义的@API 相关注解,这样就污染了源码,代码入侵有点高,而smart -doc 就不一样了,主要是通过 注释 、解析/** */ 来生成API文档的 。这样基本上没有入侵性,很自由!

    3、swagger 生成 离线的文档 需要借助第三方jar包实现,而 smart-doc 直接 运行 test 方法就可以直接导出 md,html,asciidoc 等格式文档。

    两个工具的使用

    (基于 spring-boot的 使用Demo) 使用maven 构建项目和管理依赖的 

    swagger2: 

    1、引入依赖包

    <springfox-swagger2.version>2.9.2</springfox-swagger2.version>
            <!-- swagager api 依赖包 -->
            <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-swagger2</artifactId>
                <version>${springfox-swagger2.version}</version>
            </dependency>
            <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-swagger-ui</artifactId>
                <version>${springfox-swagger2.version}</version>
            </dependency>

    2、编写swagger 配置类

    @Configuration
    @EnableSwagger2
    public class Swagger2Config extends WebMvcConfigurationSupport {
        public static final String SWAGGER_SCAN_BASE_PACKAGE = "org.demo.SpringCloud.web";
        public static final String VERSION = "1.0.0";
    
        @Bean
        public Docket createRestApi() {
            return new Docket(DocumentationType.SWAGGER_2)
                    .apiInfo(apiInfo())
                    .select()
                    .apis(RequestHandlerSelectors.basePackage(SWAGGER_SCAN_BASE_PACKAGE))//api接口包扫描路径
                    .paths(PathSelectors.any())//可以根据url路径设置哪些请求加入文档,忽略哪些请求
    
                    .build();
        }
    
        private ApiInfo apiInfo() {
            return new ApiInfoBuilder()
                    .title("Swagger2 接口文档示例")//设置文档的标题
                    .description("更多内容请关注:http://www.baidu.com")//设置文档的描述->1.Overview
                    .version(VERSION)//设置文档的版本信息-> 1.1 Version information
                    .contact(new Contact("SpringCloud", "http://www.baidu.com", "geekswg@qq.com"))//设置文档的联系方式->1.2 Contact information
                    .termsOfServiceUrl("https://baidu.com")//设置文档的License信息->1.3 License information
                    .build();
        }
    
        /**
         * 防止@EnableMvc把默认的静态资源路径覆盖了,手动设置的方式
         * @param registry
         */
        @Override
        protected void addResourceHandlers(ResourceHandlerRegistry registry) {
            // 解决静态资源无法访问
            registry.addResourceHandler("/**").addResourceLocations("classpath:/static/");
            // 解决swagger无法访问
            registry.addResourceHandler("/swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");
            // 解决swagger的js文件无法访问
            registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
        }
    }
    

      

    3、启动项目 访问 swagger-ui

     

    smart-doc

    1、引入依赖包

    <smart-doc.version>1.8.6</smart-doc.version>
            <!-- smart-doc 依赖包 -->
            <dependency>
                <groupId>com.github.shalousun</groupId>
                <artifactId>smart-doc</artifactId>
                <version>${smart-doc.version}</version>
                <scope>test</scope>
            </dependency>

    2、使用 @Test 方法 生成 api 文档 

    @Test
        public void testBuilderControllersApi() {
            ApiConfig config = new ApiConfig();
            //当把AllInOne设置为true时,Smart-doc将会把所有接口生成到一个Markdown、HHTML或者AsciiDoc中
            config.setAllInOne(true);
            config.setLanguage(DocLanguage.CHINESE);
            //Set the api document output path.
            config.setOutPath("d:/smart-doc/");
            //生成Markdown文件
            ApiDocBuilder.buildApiDoc(config);
        }
    @Test
        public void testBuilderControllersApiHtml() {
            String OUTPUT_PATH = "smart-doc/html/";
            ApiConfig config = new ApiConfig();
            config.setServerUrl("http://127.0.0.1:8080");
            //设置为严格模式,Smart-doc将降至要求每个Controller暴露的接口写上标准文档注释
    //        config.setStrict(true);
            //当把AllInOne设置为true时,Smart-doc将会把所有接口生成到一个Markdown、HHTML或者AsciiDoc中
            config.setAllInOne(true);
            config.setLanguage(DocLanguage.CHINESE);
            //HTML5文档,建议直接放到src/main/resources/static/doc下,Smart-doc提供一个配置常量HTML_DOC_OUT_PATH
            config.setOutPath(DocGlobalConstants.HTML_DOC_OUT_PATH);
            config.setOutPath(OUTPUT_PATH);
            // 设置接口包扫描路径过滤,如果不配置则Smart-doc默认扫描所有的接口类
            // 配置多个报名有英文逗号隔开
    //        config.setPackageFilters("com.power.doc.controller");
            //设置公共请求头.如果不需要请求头,则无需设置
    //        config.setRequestHeaders(
    //                ApiReqHeader.header().setName("access_token").setType("string")
    //                        .setDesc("Basic auth credentials").setRequired(true).setSince("v1.1.0"),
    //                ApiReqHeader.header().setName("user_uuid").setType("string").setDesc("User Uuid key")
    //        );
    
            //设置错误错列表,遍历自己的错误码设置给Smart-doc即可
            List<ApiErrorCode> errorCodeList = new ArrayList<>();
            for (HttpCodeEnum codeEnum : HttpCodeEnum.values()) {
                ApiErrorCode errorCode = new ApiErrorCode();
                errorCode.setValue(codeEnum.getCode()).setDesc(codeEnum.getMessage());
                errorCodeList.add(errorCode);
            }
            //不需要显示错误码,则可以不用设置错误码。
            config.setErrorCodes(errorCodeList);
            //1.7.9 优化了错误码处理,用于下面替代遍历枚举设置错误码
            //不需在文档中展示错误码则可以不设置。
    //        config.setErrorCodeDictionaries(
    //                ApiErrorCodeDictionary.dict().setEnumClass(HttpCodeEnum.class)
    //                        .setCodeField("code") //错误码值字段名
    //                        .setDescField("desc")//错误码描述
    //        );
    
    
            //设置文档变更记录,没有需要可以不设置
    //        config.setRevisionLogs(
    //                RevisionLog.getLog().setRevisionTime("2018/12/15").setAuthor("chen").setRemarks("test").setStatus("create").setVersion("V1.0"),
    //                RevisionLog.getLog().setRevisionTime("2018/12/16").setAuthor("chen2").setRemarks("test2").setStatus("update").setVersion("V2.0")
    //        );
    
            long start = System.currentTimeMillis();
            //since 1.8.1版本开始入口方法有变更
            HtmlApiDocBuilder.buildApiDoc(config);
            long end = System.currentTimeMillis();
            DateTimeUtil.printRunTime(end, start);
        }
    

     

     生成文档文件

     

    总结:

    如果 你 只想 生成 api 文档功能的 话  推荐使用 smart - doc ,更方便 无入侵! 如果你不仅想生成文档,还想使用 测试接口 功能,那就 用swagger 吧!

    PS 一般 文档不是要是 word格式嘛,那怎么办尼?用java代码生成word,那太麻烦了,而且不太好弄,这里有个小技巧,那就是 生成html格式 文档,然后打开 html文件 全选,复制,新建一个word文档,然后把刚刚拷贝的内容粘贴进去,这样 word格式的 api 文档就搞定了!格式基本上没有什么问题,而且目录文档清晰,本人亲测,只是在复制的过程中 可能表格格式会有点问题,不能正常全部显示,解决办法请移步 :https://www.cnblogs.com/geekswg/#/cnblog/works/article/13041255

  • 相关阅读:
    (一)Oracle学习笔记—— 表和表空间
    svn上检出的项目在myeclipse中报错的解决
    创建表空间报错
    PLSQL中scott账户登录不上,报错ORA-01017: invalid username/password; logon denied
    Oracle安装过程中的几点注意
    Refactoring之——代码的坏味道(二)过大的类 &(三)基本类型偏执
    Refactoring之——代码的坏味道(一)过长方法
    (一)Activiti之——简介、插件安装及BPMN元素
    用尽洪荒之力整理的Mysql数据库32条军规(转)
    技术文章翻译
  • 原文地址:https://www.cnblogs.com/geekswg/p/13053205.html
Copyright © 2011-2022 走看看