首页 > 其他分享 >6.swagger完善:界面显示注释+多版本控制

6.swagger完善:界面显示注释+多版本控制

时间:2023-09-23 18:12:04浏览次数:59  
标签:版本控制 SwaggerVersion 添加 版本 界面显示 swagger public

周末,写点简单的水一下。

新版本的vs创建项目的时候可以选择自带一个swagger。然而这只是基本的swagger功能。

 几个接口无所谓啦,随着接口越来越多,就这么丢给你,一时间也会懵逼,所以这篇文章要做的有两个功能。

  1. 给swagger文档添加注释
  2. 给swagger添加切换“版本”的功能(也可以理解为:让不同功能模块的接口显示在一个页面,不然几十上百的接口放一起找也不好找呀~)

右键项目>属性>生成>输出>XML文档文件路径,添加输出的路径,我一般会设置在程序集下的根路径,例如这样:

文件命名什么的随意,一般跟项目有关例如:FastEasy.Readme.xml。

然后去swagger相关的Module模块中去添加一些配置。我这个文章相关的项目一开始的时候就将这些注入配置单独搞成独立的一个模块,所以你只是看到这个文章,那默认就在Programs里面找AddSwaggerGen就好。

        Services.AddSwaggerGen(s =>
        {
            //多版本
            typeof(SwaggerVersion).GetEnumNames().ToList().ForEach(v =>
            {
                s.SwaggerDoc(v, new Microsoft.OpenApi.Models.OpenApiInfo
                {
                    Version = v,
                    Description = $"{v} API",
                    Title = v,
                });
                //添加注释
                var basePath=AppDomain.CurrentDomain.BaseDirectory;
                var xmlPath = Path.Combine(basePath, "FastEasy.Readme.xml");
                s.IncludeXmlComments(xmlPath,true);
            });
        });

 

 

 如果不需要切换版本,那就关注添加注释下面三行代码就好,获取注释文档的路径,然后添加到swagger中。

接下来就是多版本切换,上面的代码已经是了,需要在意的地方是typeof里的SwaggerVersion。这是创建的一个枚举,然后在枚举中按需添加不同的版本切换,例如

        public enum SwaggerVersion
        {
            FastEasy = 1,
            OpenAPI = 2
        }

 

如果要使用多版本,中间件管道里也要改一下

        app.UseSwagger();
        app.UseSwaggerUI(s =>
        {
            typeof(SwaggerVersion).GetEnumNames().ToList().ForEach(v =>
            {
                s.SwaggerEndpoint($"swagger/{v}/swagger.json", $"{v}");
                s.RoutePrefix = string.Empty;
            });
        });

 

到这里就已经完成90%了。最后一步就是给不同的方法或者控制器添加[ApiExplorerSettings(GroupName = "OpenAPI")]

        [HttpGet("MUL")]
        [ApiExplorerSettings(GroupName = "OpenAPI")]
        public int MUL(int i, int j)
        {
            return test.MUL(i, j);
        }

 

原本是加减乘除4个接口,现在就是FastEasy下两个,OpenAPI下两个(只是测试,跟名称毫无关系)

 现在完成了99%了。如果像我这种小公司,没有版本的区别,无非就是为了看着方便,因为功能模块去区分开来。就像现在,查看文档的时候可以根据分类找到相对应的接口,不至于一眼乱糟糟的。

但是实际上并未完成版本控制,因为你会发现,他们的请求路径是差不多的。如果要完成真正的版本控制,有两种方法,第一种简单,路由上写死了:/v1/xxxx   /v2/xxxxx……

第二种就是自定义路由特性:添加一个特性配置的类:SwaagerRouteAttribute。我直接贴代码了,很简单的几行,代码的注释足以解释清楚了

    public class SwaagerRouteAttribute : RouteAttribute, IApiDescriptionGroupNameProvider
    {
        /// <summary>
        /// 默认的路由配置
        /// </summary>
        /// <param name="actionName"></param>
        public SwaagerRouteAttribute(string actionName) : base(actionName)
        {
        }

        /// <summary>
        /// 分组名称,控制不同版本:等同于配置ApiExplorerSettings(GroupName ="FastEasy")
        /// </summary>
        public string? GroupName { get; set; }

        /// <summary>
        /// 自定义的路由配置
        /// </summary>
        /// <param name="version"></param>
        /// <param name="actionName"></param>
        public SwaagerRouteAttribute(SwaggerVersion version, string actionName = "[action]") : base($"/{version.ToString()}/[controller]/{actionName}")
        {
            GroupName = version.ToString();
        }
    }

 

现在!用自己封装的路由属性添加到方法上面(截图看的全)


 

此时才算完成真的版本控制效果:

 啊掰掰~

 

标签:版本控制,SwaggerVersion,添加,版本,界面显示,swagger,public
From: https://www.cnblogs.com/zhang-3/p/17724845.html

相关文章

  • Git版本控制
    Git版本控制注意:开始学习之前,确保自己的网络可以畅通的连接Github:https://github.com,这个是一个国外网站,连起来特别卡,至于用什么方式实现流畅访问,懂的都懂。其实版本控制在我们的生活中无处不在,比如你的期末或是毕业答辩论文,由于你写得不规范或是老师不满意,你的老师可能会让你......
  • Git版本控制工具
    Git版本控制工具一.简介1、git是一款分布式的版本控制工具,使用git每台本地主机都可以作为一个本地库,每个本地库可实现资源的相互共享,也可以把本地库的资源推送到远程仓库中(码云、github),不同本地库可以作为一个节点,允许有多个节点之间实现资源共享,避免了单点故障。2、与SVN区......
  • Swagger生产nodejs后台代码(nestia框架)
    Swagger文档生产nestia框架代码#SETUPGLOBALLYnpminstall-g@nestia/migrate#DOMIGRATEnpx@nestia/migrateswagger.jsonoutput_directoryNPM是一个Node包管理器,NPX是一个Node包执行器。npm查看全局安装的包npmls-g......
  • Java 后端整合 Swagger + Knife4j 接口文档
    官方文档:https://doc.xiaominfo.com/docs/quick-start环境SpringBoot版本2.7.2JDK版本1.81.引入依赖   <!--https://doc.xiaominfo.com/knife4j/documentation/get_start.html-->   <dependency>     <groupId>com.github.xiaoymin</gro......
  • Swagger
    Swagger是一个规范和完整的框架,用于生成、描述、调用和可视化RESTful风格的Web服务(https://swagger.io/)。它的主要作用是:使得前后端分离开发更加方便,有利于团队协作接口的文档在线自动生成,降低后端开发人员编写接口文档的负担功能测试Spring已经将Swagger纳入......
  • knife4j——集成Swagger生成Api文档
      首先是依赖导入<dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId><version>3.0.2</version></dependency>    然后是配置文件中的配置/***配置类,注册web层相关组件......
  • Git:分布式版本控制系统的利器
    在现代软件开发中,版本控制是一个至关重要的环节。Git作为一款分布式版本控制系统,为开发者们提供了高效、灵活的版本管理方案。本文将介绍Git的基本用法和主要特点,帮助您更好地理解和使用这个强大的工具。Git简介Git是由LinusTorvalds创造的分布式版本控制系统,以其速度和灵活性而闻......
  • Swagger常见注解@API、@ApiOperation、@ApiParam等
    Swagger2一些常用注解最近遇到了一个使用swagger来生成接口文档的项目,在controller看到了一些没用过的注解(@API、@ApiOperation等),遂记录一下@API使用在类上,表明是swagger资源,@API拥有两个属性:value、tags,源码如下//Iftagsisnotused,thisvaluewillbeusedtoset......
  • Swagger详解
    SpringBoot是一个基于Spring框架的轻量级开源框架,它的出现极大地简化了Spring应用的搭建和开发。在开发过程中,接口文档是非常重要的一环,它不仅方便开发者查看和理解接口的功能和参数,还能帮助前后端开发协同工作,提高开发效率。本文将介绍如何在SpringBoot中使用Swagger......
  • Springboot整合knife4j配置swagger教程-干货
    开启swagger文档,直接上教程。第一步:引入依赖<!--swagger依赖--><dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId><version>3.0.3</version></de......