返回顶部
首页 > 资讯 > 精选 >.NetCore使用Swagger+API多版本控制的流程是什么
  • 335
分享到

.NetCore使用Swagger+API多版本控制的流程是什么

2023-06-22 07:06:54 335人浏览 泡泡鱼
摘要

这篇文章主要讲解了“.netcore使用swagger+api多版本控制的流程是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“.netcore使用Swagger+API多版本控制的流程是

这篇文章主要讲解了“.netcore使用swagger+api多版本控制的流程是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“.netcore使用Swagger+API多版本控制的流程是什么”吧!

本文实例环境及版本.netCore3.1、Swagger6.1

现在的开发大部分都是前后端分离的模式了,后端提供接口,前端调用接口。后端提供了接口,需要对接口进行测试,之前都是使用浏览器开发者工具,或者写单元测试,再或者直接使用Postman,但是现在这些都已经out了。后端提供了接口,如何跟前端配合说明接口的性质,参数等这也是一个问题。有没有一种工具可以根据后端的接口自动生成接口文档,说明接口的性质,参数等信息,又能提供接口调用等相关功能呢?答案是有的。Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 WEB 服务。而作为.net core开发,Swashbuckle是swagger应用的首选!

总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法、参数和模型紧密集成到服务器端的代码,允许 API 来始终保持同步。Swagger 让部署管理和使用功能强大的 API 从未如此简单。

整个swagger页面访问流程如下:

  1、浏览器输入swaggerUI页面地址,比如:Http://localhost:5000/swagger/index.html,这个地址是可配置的

  2、请求被SwaggerUI中间件拦截,然后返回页面,这个页面是嵌入的资源文件,也可以设置成外部自己的页面文件(使用外部静态文件拦截)

  3、页面接收到Swagger的Index页面后,会根据SwaggerUI中间件中使用SwaggerEndpoint方法设置的文档列表,加载第一个文档,也就是获取文档架构信息swagger.JSON

  4、浏览器请求的swagger.json被Swagger中间件拦截,然后解析属于请求文档的所有接口,并最终返回一串json格式的数据

  5、浏览器根据接收到的swagger,json数据呈现UI界面

一、Swagger基本使用

新建NetCore项目,添加相关Controller并添加引用Swashbuckle.AspNetCore.Swagger

在Startup中添加配置

在ConfigureServices中注入Swashbuckle服务

services.AddSwaggerGen(c =>{     c.SwaggerDoc("V1", new OpenApiInfo     {           //版本            Version = "V1",           //标题           Title = $"接口文档-NetCore3.1",           //描述           Description = $"NetCore Http API v1",           //联系方式           Contact = new OpenApiContact { Name = "测试", Email = "", Url = new Uri("https://www.cnblogs.com/mzflog/") },           License = new OpenApiLicense { Name = "测试2", Url = new Uri("https://www.cnblogs.com/mzflog/") }      });      // 加载XML注释      c.IncludeXmlComments(XmlCommentsFilePath); });

新增XmlCommentsFilePath 属性,此时需要引用Microsoft.Extensions.PlatfORMAbstractions

/// <summary> /// 获取当前项目名的XML文件 /// </summary> static string XmlCommentsFilePath {     get     {         var basePath = PlatformServices.Default.Application.ApplicationBasePath;         var fileName = typeof(Startup).GetTypeInfo().Assembly.GetName().Name + ".xml";         return Path.Combine(basePath, fileName);     }  }

在Configure中添加Swagger中间件UseSwagger,UseSwaggerUI

UseSwagger:添加Swagger中间件,主要用于拦截swagger.json请求,从而可以获取返回所需的接口架构信息

UseSwaggerUI:添加SwaggerUI中间件,主要用于拦截swagger/index.html页面请求,返回页面给前端

app.UseSwagger(); app.UseSwaggerUI(c => {     c.SwaggerEndpoint($"/swagger/V1/swagger.json", $"NetCore V1");     //c.RoutePrefix = string.Empty;     //如果是为空 访问路径就为 根域名/index.html,注意localhost:8001/swagger是访问不到的     //路径配置,设置为空,表示直接在根域名(localhost:8001)访问该文件     c.RoutePrefix = "swagger"; // 如果你想换一个路径,直接写名字即可,比如直接写c.RoutePrefix = "swagger"; 则访问路径为 根域名/swagger/index.html });

右键项目属性在生成中添加XML

.NetCore使用Swagger+API多版本控制的流程是什么

此时通过http://localhost:端口号/swagger即可访问

.NetCore使用Swagger+API多版本控制的流程是什么

二、Swagger结合版本控制

版本控制的好处:

  1、有助于及时推出功能, 而不会破坏现有系统。

它还可以帮助为选定的客户提供额外的功能。

添加对Microsoft.AspNetCore.mvc.Versioning和Microsoft.AspNetCore.Mvc.Versioning.ApiExplorer的引用,本文使用版本4.1.0

在ConfigureServices中

services.AddApiVersioning(option =>{      // 可选,为true时API返回支持的版本信息      option.ReportApiVersions = true;      // 请求中未指定版本时默认为1.0      option.DefaultApiVersion = new ApiVersion(1, 0);      //版本号以什么形式,什么字段传递      option.ApiVersionReader = ApiVersionReader.Combine(new HeaderApiVersionReader("api-version"));      // 在不提供版本号时,默认为1.0  如果不添加此配置,不提供版本号时会报错"message": "An API version is required, but was not specified."      //option.AssumeDefaultVersionWhenUnspecified = true;      //默认以当前最高版本进行访问      //option.ApiVersionSelector = new CurrentImplementationApiVersionSelector(option); }).AddVersionedApiExplorer(opt => {      //以通知swagger替换控制器路由中的版本并配置api版本      opt.SubstituteApiVersionInUrl = true;      // 版本名的格式:v+版本号      opt.GroupNameFormat = "'v'VVV";      //是否提供API版本服务      opt.AssumeDefaultVersionWhenUnspecified = true; });
//方式一 (不建议使用)   此种方式报警告:ASP0000 从应用程序代码调用“BuildServiceProvider”会导致创建单例服务的附加副本。考虑替代方案,例如将依赖注入服务作为“配置”的参数 services.AddSwaggerGen(options => {       // 解析IApiVersionDescriptionProvider服务       var provider = services.BuildServiceProvider().GetRequiredService<IApiVersionDescriptionProvider>();       //为每个发现的API版本添加一个swagger文档 可跳过不需要记录的       foreach (var description in provider.ApiVersionDescriptions)       {            options.SwaggerDoc(description.GroupName, CreateInfoForApiVersion(description));       }     //加载XML注释  并启用控制器的注释信息默认为false不启用       options.IncludeXmlComments(XmlCommentsFilePath,true);  });//方式二 (建议使用)services.AddSwaggerGen();//解决上面报ASP0000警告的方案services.AddOptions<SwaggerGenOptions>()        .Configure<IApiVersionDescriptionProvider>((options, service) =>        {             options.ResolveConflictingActions(apiDescriptions => apiDescriptions.First());             // 添加文档信息             foreach (var item in service.ApiVersionDescriptions)             {                 options.SwaggerDoc(item.GroupName, CreateInfoForApiVersion(item));             }             //给swagger添加过滤器             //options.OperationFilter<SwaggerParameterFilter>();             // 加载XML注释             options.IncludeXmlComments(XmlCommentsFilePath, true);        });

添加CreateInfoForApiVersion方法

static OpenApiInfo CreateInfoForApiVersion(ApiVersionDescription description) {       var info = new OpenApiInfo()       {             //标题             Title = $".NET Core API for 测试项目 {description.ApiVersion}",             //当前版本             Version = description.ApiVersion.ToString(),             //文档说明             Description = "api项目 当前环境-" + EnvironmentName,             //联系方式             Contact = new OpenApiContact() { Name = "标题", Email = "", Url = null },             TermsOfService = new Uri(""),             //许可证             License = new OpenApiLicense() { Name = "文档", Url = new Uri("") }         };      //当有弃用标记时的提示信息         if (description.IsDeprecated)         {             info.Description += " - 此版本已放弃兼容";         }         return info;   }

在Configure中添加

IApiVersionDescriptionProvider:用于枚举定义的API版本的API版本描述符提供程序

public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IApiVersionDescriptionProvider provider)

//添加Swagger中间件,主要用于拦截swagger.json请求,从而可以获取返回所需的接口架构信息app.UseSwagger(opt =>{      //路由模板,默认值是/swagger/{documentName}/swagger.json,这个属性很重要!而且这个属性中必须包含{documentName}参数。      //opt.RouteTemplate= "/swagger/{documentName}/swagger.json";      // 表示按Swagger2.0格式序列化生成swagger.json,这个不推荐使用,尽可能的使用新版本的就可以了      //opt.SerializeAsV2 }); //添加SwaggerUI中间件,主要用于拦截swagger / index.html页面请求,返回页面给前端 app.UseSwaggerUI(options => {       // 为每个版本创建一个JSON       foreach (var description in provider.ApiVersionDescriptions)       {             //这个属性是往SwaggerUI页面head标签中添加我们自己的代码,比如引入一些样式文件,或者执行自己的一些脚本代码             //options.HeadContent += $"<script type='text/javascript'>alert('欢迎来到SwaggerUI页面')</script>";             //展示默认头部显示的下拉版本信息             //options.SwaggerEndpoint($"/swagger/{description.GroupName}/swagger.json", description.GroupName.ToUpperInvariant());             //自由指定头部显示的下拉版本内容             options.SwaggerEndpoint($"/swagger/{description.GroupName}/swagger.json", "coreApi" + description.ApiVersion);              //如果是为空 访问路径就为 根域名/index.html,注意localhost:8001/swagger是访问不到的              //options.RoutePrefix = string.Empty;              // 如果你想换一个路径,直接写名字即可,比如直接写c.RoutePrefix = "swagger"; 则访问路径为 根域名/swagger/index.html              options.RoutePrefix = "swagger";        }  });

在api的Controller中添加版本

[ApiVersion("1.0", Deprecated = false)] //Deprecated是否弃用该版本 默认为false不弃用。即使标记了弃用此接口还是会显示,只是做个提示此版本将会被弃用了。 [Route("api/[controller]")] [ApiController] //[ApiExplorerSettings(IgnoreApi = true)] 隐藏该接口Controller public class ValuesController : Controller [Obsolete] //弃用该Action方法 [ApiExplorerSettings(IgnoreApi = true)] //隐藏该Action方法 public IEnumerable<string> Get()

为体验版本控制在新建一个控制器并添加 [ApiVersion("2.0")]

此时访问页面,在右侧的下拉框中可选择不同的版本,会展示不同版本下的控制器。

.NetCore使用Swagger+API多版本控制的流程是什么

感谢各位的阅读,以上就是“.NetCore使用Swagger+API多版本控制的流程是什么”的内容了,经过本文的学习后,相信大家对.NetCore使用Swagger+API多版本控制的流程是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: .NetCore使用Swagger+API多版本控制的流程是什么

本文链接: https://lsjlt.com/news/303226.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • .NetCore使用Swagger+API多版本控制的流程是什么
    这篇文章主要讲解了“.NetCore使用Swagger+API多版本控制的流程是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“.NetCore使用Swagger+API多版本控制的流程是...
    99+
    2023-06-22
  • .NetCore使用Swagger+API多版本控制的流程分析
    目录一、Swagger基本使用二、Swagger结合版本控制本文实例环境及版本.NetCore3.1、Swagger6.1 现在的开发大部分都是前后端分离的模式了,后端提供接口,前端...
    99+
    2024-04-02
  • MySQL的多版本并发控制MVCC实现方法是什么
    这篇文章主要讲解了“MySQL的多版本并发控制MVCC实现方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL的多版本并发控制MVCC实现方法是什么”吧!什么是MVCCMVCC...
    99+
    2023-06-22
  • php流程控制语句的作用是什么
    php流程控制语句的作用是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。php流程控制语句的作用就是能基于不同条件执行不同的动作,PHP中流程控制语句有三种...
    99+
    2023-06-21
  • shell脚本中的控制流结构是什么
    shell脚本中的控制流结构是什么?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。shell中一般的if-then-else函数格式无外乎如下:if 条件1then...
    99+
    2023-06-09
  • SVN与Git版本控制的优缺点是什么
    本篇内容主要讲解“SVN与Git版本控制的优缺点是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SVN与Git版本控制的优缺点是什么”吧!一、集中式vs分布式1.Subversion属于集中...
    99+
    2023-06-30
  • Java中的三种流程控制语句是什么
    这篇文章主要讲解了“Java中的三种流程控制语句是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java中的三种流程控制语句是什么”吧!顺序语句顺序顾名思义就是程序自上而下执行publi...
    99+
    2023-06-30
  • 如何在IDE中使用Git进行版本控制?GO打包是什么?
    在软件开发中,版本控制是非常重要的,它可以让我们更好地管理代码,方便团队协作,以及保证代码的质量。Git是目前最流行的版本控制工具之一,它可以让我们轻松地管理代码并追踪代码的变化。在本文中,我们将介绍如何在IDE中使用Git进行版本控制,...
    99+
    2023-10-30
    git 打包 ide
  • 为什么Git是如此重要的版本控制工具?
    Git是目前最常用的版本控制工具之一,它的重要性不言而喻。本文将从Git的基本原理、功能和应用场景三个方面,详细介绍Git为什么是如此重要的版本控制工具。 一、Git的基本原理 Git是一种分布式版本控制系统,它的最基本原理是将开发者所做的...
    99+
    2023-08-30
    索引 git npm
  • 网站设计制作的基本流程是什么
    网站设计制作的基本流程如下:1. 确定需求:从客户那里获取需求,包括网站类型、目标用户、功能需求等。2. 策划方案:根据需求,制定网...
    99+
    2023-06-05
    网站设计制作
  • Redis中序列化数据的版本控制技巧是什么
    在Redis中序列化数据的版本控制技巧主要有以下几种方法: 使用版本字段:在存储数据时,可以为数据添加一个版本字段,用于记录数据...
    99+
    2024-04-29
    Redis
  • Android Studio与SVN版本控制程序的协作使用指南
    AndroidStudio 的SVN 安装和使用方法与我以前用的其他IDE 都有很大差别,感觉特麻烦,网上相关资料很少,貌似现在 Git 比较流行,之前有用过 github 但...
    99+
    2022-06-06
    Android Studio studio 程序 SVN Android
  • JavaScript中的程序控制流和函数方法是什么
    本篇内容主要讲解“JavaScript中的程序控制流和函数方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaScript中的程序控制流和函数方法是什么”吧!程序控制流程序的运行可以...
    99+
    2023-07-04
  • Git分布式版本控制系统的核心原理是什么?
    Git是目前最流行的分布式版本控制系统,它具有高效、快速、稳定等优点,被广泛应用于软件开发、文档管理等领域。那么在本文中,我们将详细探讨Git分布式版本控制系统的核心原理,带你深入了解Git的原理和机制。 Git分布式版本控制系统的核心...
    99+
    2023-09-14
    分布式 git leetcode
  • 使用canvas绘制流程步骤是怎么样的
    这篇文章主要介绍使用canvas绘制流程步骤是怎么样的,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!简介    html的标签 用于图形的绘制,通过脚本 (通常是JavaScript)来完成,ca...
    99+
    2023-06-04
  • java使用多线程的条件是什么
    使用多线程的条件有以下几个:1. 程序需要并发执行多个任务或同时处理多个请求。2. 程序中存在可分解为独立子任务的任务集合。3. 程...
    99+
    2023-09-26
    java
  • go多线程使用的方法是什么
    在Go语言中,多线程的概念被称为Goroutine。Goroutine是一种轻量级的线程,由Go语言的运行时系统管理。创建一个Gor...
    99+
    2024-03-04
    go
  • c++多进程使用的方法是什么
    在C++中,可以使用操作系统提供的多进程创建和管理方法来实现多进程。以下是一些常用的方法: 使用fork()函数创建子进程:fo...
    99+
    2024-04-02
  • 域名主机租用建站的基本流程是什么
    1.选择域名:首先需要选择一个合适的域名,这个域名应该与企业或个人的品牌、产品或服务相关,易于记忆、拼写和搜索。2.选择主机:选择合...
    99+
    2023-06-07
    域名主机 主机 主机
  • Java中Map集合体系的基本使用和常用API是什么
    这篇文章主要讲解了“Java中Map集合体系的基本使用和常用API是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java中Map集合体系的基本使用和常用API是什么”吧!Map集合概述...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作