• NetCore WebApi项目使用Swagger生成API交互文档


    开篇:

      现在项目的开发一般都采用前后端分离的模式,后端同学完成开发后需要给前端的同学提供详细的API接口文档说明,手动整理费事费力。那有没有解放双手的自动化工具呢?答案是肯定的。之前做.net webapi的时候使用的HelpPage来生成的API文档,到netcore这里,就是我们今天要分享的Swagger,它可以根据代码注释自动生成API描述文档,也可以通过配置生成交互式文档实现在线接口测试。

    关于这个swagger大兄弟:

      全称:Swashbuckle.AspNetCore,开源项目,git地址:https://github.com/domaindrivendev/Swashbuckle.AspNetCore

    目录:

      1.基本使用

        1.1 安装依赖

        1.2 startup配置

        1.3 swagger启动配置

      2.进阶使用

        2.1 接口描述

        2.2 返回类型描述

        2.3 忽略不生成到API文档

        2.4 api分组管理

        2.5 多xml文档配置

      3.扩展使用

        3.1 全局信息添加(作者、联系人、许可信息等)

        3.2 默认折叠配置

    一、基本使用

      1.1 安装Swagger依赖

      第一种方式,程序包管理控制台:install-package Swashbuckle.AspNetCore

      

      第二种方式,Nuget包管理中搜索 Swashbuckle.AspNetCore

      

      1.2 startup配置

      要使用swagger生成文档,我们需要在startup的ConfigureServices 和 Configure中对其进行中间件配置

    • 在ConfigureServices中注册swagger生成器
    1 // 注册swagger生成器,定义一个或多个文档,多个文档后边会讲到
    2 services.AddSwaggerGen(c =>
    3 {
    4     c.SwaggerDoc("v1", new OpenApiInfo { Title = "曦昊-API说明文档", Version = "v1" });
    5 });
    • 在Configure中启用中间件配置
     // 启用中间件以将生成的 Swagger 公开为JSON终结点
     app.UseSwagger();
     // 启用swagger-ui 中间件,指定 Swagger JSON 终结点,以来公开交互式文档
     app.UseSwaggerUI(c =>
     {
        c.SwaggerEndpoint("/swagger/v1/swagger.json", "API说明文档 V1");
     });

      至此,swagger的基本配置完成,我们可以启动应用程序,输入/swagger访问看看啦

      

      我们可以看到swagger已经自动帮我们生成了项目的api接口描述文档

      

      1.3 swagger启动配置

      完成上边的步骤后,我们已经可以启动浏览/swagger访问我们的Rest Apis文档了,但是每次启动再输入swagger也太麻烦了,接下来我们把swagger设置为我们的启动地址

      文件:Properties - > launchSettings.json

      将标注位置改为“swagger”

      

      再次启动,直接进入了我们的swagger文档页面。

    二、进阶使用

       2.1 接口描述

      上边已经提过swagger会根据我们的注释生成文档描述信息,但并不是我们添加了注释就可以的,想要swagger正常显示我们的备注信息,除了添加注释信息外,我们还要为swagger配置包含xml描述信息

      首先按照我们平常的注释方式为接口添加注释

      

      其次,为我们的项目配置输出xml文件(项目右键--属性--生成--输出)

      

       最后在startup的ConfigureServices中配置swagger包含xml描述信息

        

        // 配置从xml文档中获取描述信息
        // 路径我们获取的项目路径+startup命名空间(也可以直接写生成的xml名称)
        var filePath = Path.Combine(System.AppContext.BaseDirectory, typeof(Startup).Assembly.GetName().Name + ".xml");
        c.IncludeXmlComments(filePath);
    View Code

      ok,现在我们启动调试进入swaggerUI,我们会看到swagger已经显示出了我们自定义的注释信息

      

      2.2 返回类型描述

      当我们写的接口已IActionResult为返回类型的时候,我们会发现swagger的Responses下并没有为我们生成返回信息描述,因为它并不知道我们具体要返回的是什么形式的数据

      例如,我们新写一个分页接口:

          

       我们可以看到没有任何的返回信息描述,那怎么办呢?这里我们就要用到swagger的ProducesResponseType特性来告诉swagger我们的返回结构

      

       再次启动调试,我们发现在Responses这一模块已经正确显示了我们的PageList描述信息。

      细心的可能会发现我们在使用ProducesResponseType的时候除了给了它一个type,还给了一个200,这是啥意思呢?

      这个200的意思就是响应状态200的时候我给你返回这么一个结构的数据,那是不是说我们可以定义不同响应状态不同数据结构呢?答案是肯定的。ProducesResponseType是可以多次标记的,你只需要为其他状态按照上边的方式添加返回结构标记即可

      

      2.3 忽略不生成到API文档

      有些时候我们需要向文档的阅读者隐藏部分的接口信息,这个时候我们就会用到ApiExplorerSettings特性

      在我们需要隐藏的接口标记  [ApiExplorerSettings(IgnoreApi = true)]  即可

      2.4 api分组管理

      当我们的接口过多想要拆分显示,或我们根据不同大类进行区分(系统操作、业务操作...),或我们要分多个版本等等,我们就需要用到分组这个操作,实际上分组就是为swagger生成多个文档,上操作:

      第一步,为swagger添加一个新的文档(startup -- > ConfigureServices)

      

        第二步,为swagger添加一个对应的json终结点

      

       第三步,为控制器或action方法添加标记 [ApiExplorerSettings(GroupName = "v2")] ,groupName设置的是要在哪一组中显示,这里是区分大小写的,要跟上述设置中保持一致

       然后就可以在swagegrUI界面的右上角切换不同的文档了

      

      2.5 多xml文档配置

      常用场景:跨程序集显示注释信息

      swagger我们默认配置的是加载当前程序生成的xml,我们只需要为为其它程序集配置输出xml,并在services.AddSwaggerGen中配置加载改xml文件即可

      例如:

      

        但是,如果有多个程序集需要配置,这里是不是会有很多的配置项,并且每加一个程序集我们就要写一遍,即不方便又造成代码的臃肿。ok,接下来我们进行一下改版

      首先,我们把所有的xml生成到一个目录下,比如当前应用根目录的docs:

      

       

      然后我们在swagger设置xml文档的地方改为以下方式  

        // 获取自定义的xml目录   
        var xmlPath = Path.Combine(System.AppContext.BaseDirectory, "Docs");
        DirectoryInfo dir = new DirectoryInfo(xmlPath);
        // 获取目录下的所有xml文件,并设置为swagger文档包含文件
        dir.GetFiles("*.xml").ToList().ForEach(u =>
        {
             c.IncludeXmlComments(u.FullName, true);
        })

      ok,再次启动程序,我们会发现,XH.Core下Model对象的描述信息也有了~

     三、扩展使用

      3.1 全局信息添加(作者、联系人、许可信息等)

      这些信息的配置是在services.AddSwaggerGen下进行配置,如下:

      

      运行程序,显示如下

      

      

      3.2 默认折叠配置

      当接口慢慢变多,你想进入swagger页面后能非常清晰的浏览controller级目录,你会需要这个配置  

        app.UseSwaggerUI(c =>
        {
             c.SwaggerEndpoint("/swagger/v1/swagger.json", "API说明文档 V1");
             c.SwaggerEndpoint("/swagger/v2/swagger.json", "API说明文档 V2");
             c.DocExpansion(DocExpansion.None); // 全部折叠
        });

      如果想隐藏掉Schemas,使用 c.DefaultModelsExpandDepth(-1) 设置即可,位置同上

      

      

      ok,罗里吧嗦码了这些,文本粗糙,请多包涵,有问题欢迎指出,谢过!

       

      

  • 相关阅读:
    索引的实现:B+树
    SQL Server 查
    SQL Server 增、删、改、小部分查
    最最最最最基础的SQL Server
    三大范式
    SQLserver数据类型
    第一阶段项目
    2017.10.17一阶段项目心得
    jquery&bootstrap
    国庆小长假结束后的一阶段小测验
  • 原文地址:https://www.cnblogs.com/xihao/p/13497271.html
Copyright © 2020-2023  润新知