- 前言
- 一、Swagger是什么?
- 二、使用步骤
- 1.引入库
- 2.代码
- 3.进阶用法
- 4.接口调试
- 总结
前言
目前的项目基本都是前后端分离,API 功能的演变是不可避免的,但维护 API 文档的头痛不是必须的。Swagger 工具将繁重的工作从生成和维护您的 API 文档中解脱出来,确保您的文档随着 API 的发展而保持最新。
一、Swagger是什么?
Swagger 是一个规范且完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。
Swagger 的目标是对 REST API 定义一个标准且和语言无关的接口,可以让人和计算机拥有无须访问源码、文档或网络流量监测就可以发现和理解服务的能力。当通过 Swagger 进行正确定义,用户可以理解远程服务并使用最少实现逻辑与远程服务进行交互。与为底层编程所实现的接口类似,Swagger 消除了调用服务时可能会有的猜测。
swagger官网:https://swagger.io
二、使用步骤本次演示源码上传至gitee
地址:https://gitee.com/huang945617/netcore3—using-swagger
通过“管理NuGet程序包”下载 Swashbuckle.AspNetCore包:
编辑 Startup.cs:
1.将swagger生成器添加到ConfigureServices方法中:
public void ConfigureServices(IServiceCollection services) { services.AddControllers(); #region Swagger服务 services.AddSwaggerGen(o => { o.SwaggerDoc("v1", new OpenApiInfo { Title = "WebApi", Version = "v1", Contact = new OpenApiContact { Name = "对待丶", Email = string.Empty, Url = new Uri("http://127.0.0.1:5000/swagger/index.html") }, Description = "API描述", License = new OpenApiLicense { Name = "对待丶", Url = new Uri("http://127.0.0.1:5000/swagger/index.html") } }); }); #endregion }
2.将swagger中间件添加到Configure方法中:
#region Swagger 中间件 app.UseSwagger(); app.UseSwaggerUI(o => { o.SwaggerEndpoint("/swagger/v1/swagger.json", "WebApi"); }); #endregion
添加一个测试控制器:
添加后我们启动项目看下效果:http://localhost:/swagger/index.html
启动后虽然可以正常的浏览,但是我们对方法/参数的注释却无法展示出来,这样明显无法达到我们想要的效果。
接下来我们可通过启用XML来实现注释
方法一:
“解决方案资源管理器”选择项目右键单击->“属性”,设置XML文档文件的路径
方法二:
通过“管理NuGet程序包”下载 Microsoft.Extensions.PlatformAbstractions包
使用以上方法的其中一种后,更改ConfigureServices方法中的AddSwaggerGen
public void ConfigureServices(IServiceCollection services) { services.AddControllers(); #region Swagger服务 services.AddSwaggerGen(o => { o.SwaggerDoc("v1", new OpenApiInfo { Title = "WebApi", Version = "v1", Contact = new OpenApiContact { Name = "对待丶", Email = string.Empty, Url = new Uri("http://127.0.0.1:5000/swagger/index.html") }, Description = "API描述", License = new OpenApiLicense { Name = "对待丶", Url = new Uri("http://127.0.0.1:5000/swagger/index.html") } }); var assemblyName = Assembly.GetEntryAssembly().GetName().Name; //控制器 方法/参数注释 options.IncludeXmlComments(Path.Combine(AppContext.baseDirectory, $"{assemblyName}.xml"), true); }); #endregion }
更改后,在启动项目浏览看下效果
这样我们添加的注释就可以全部显示出来了。
当项目越来越大时,功能模块也越来越多,全部展示在一个页面,不方便对接人员的查找及阅读,如果我们按照我们对应的功能模块来分组是否会更好呢?接下来简单的修改下
1.新建一个类,里面放的是分组对应模块的信息
public static class SwaggerApi { ////// Swagger分组信息,将进行遍历使用 /// public static readonly ListApiInfos = new List () { new SwaggerApiInfo { UrlPrefix = SwaggerGroupingModel.GROUPNAME_TEST, Name = "测试模块", OpenApiInfo = new OpenApiInfo { Version = "v1", Title = "Api-Test", Description = "Api-测试模块" } }, new SwaggerApiInfo { UrlPrefix = SwaggerGroupingModel.GROUPNAME_COMM, Name = "公共模块", OpenApiInfo = new OpenApiInfo { Version = "v1", Title = "WebApi-Comm", Description = "WebApi-公共模块" } } }; /// /// 分组信息 /// pullic class SwaggerApiInfo { ////// URL前缀 /// public string UrlPrefix { get; set; } ////// 名称 /// public string Name { get; set; } ////// public OpenApiInfo OpenApiInfo { get; set; } } } ////// /// Swagerr分组模块 /// public static class SwaggerGroupingModel { ////// 公共数据模块 /// public const string GROUPNAME_TEST = "test"; ////// 公共数据模块 /// public const string GROUPNAME_COMM = "comm"; }
2.新建一个swagger的扩展类Extensions
////// Swagger 扩展 /// public static partial class Extensions { ////// 配置自定义Swagger服务 /// /// 应用程序生成器 public static IApplicationBuilder UseDefaultSwagger(this IApplicationBuilder builder) { builder.UseSwagger(); builder.UseSwaggerUI(options => { options.DocExpansion(DocExpansion.None); //通过循环将加载信息 SwaggerApi.ApiInfos.ForEach(x => { options.SwaggerEndpoint($"/swagger/{x.UrlPrefix}/swagger.json", x.Name); }); #region 以下参数可自行设置 // 模型的默认扩展深度,设置为 -1 完全隐藏模型 options.DefaultModelsExpandDepth(-1); // API文档仅展开标记 options.DocExpansion(DocExpansion.List); // API前缀设置为空 options.RoutePrefix = string.Empty; options.documentTitle = "WebApi文档"; //return; #region }); return builder; } ////// 初始化Swagger /// /// public static void InitSwagger(this IServiceCollection services) { var assemblyName = Assembly.GetEntryAssembly().GetName().Name; //添加Swagger services.AddSwaggerGen(options => { //通过循环将加载信息 SwaggerApi.ApiInfos.ForEach(x => { options.SwaggerDoc(x.UrlPrefix, x.OpenApiInfo); }); //解决相同类名会报错的问题 options.CustomSchemaIds(type => type.FullName); //控制器注释 options.IncludeXmlComments(Path.Combine(AppContext.baseDirectory, $"{assemblyName}.xml"), true); }); } }
3.修改Startup类,通过直接调用swagger的扩展类Extensions来添加服务、中间件
public void ConfigureServices(IServiceCollection services) { services.AddControllers(); #region Swagger服务注入 services.InitSwagger(); #endregion }
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { #region Swagger 中间件 app.UseSwagger(); app.UseDefaultSwagger(); #endregion }
在创建2个测试控制器,在控制器上添加特性[ApiExplorerSettings("")],没有添加此特性的控制器默认是在每个分组中都显示
启动在浏览下效果,可以看到,控制器都有按照我们的分组展示出来,这样对接人员可以更加方便的来查看对应的接口。
Swagger除了可以提供接口文档之外,还可以直接进行调试。
选择接口,点击【Try it out】,如果有参数的情况,编辑参数值,点击【Execute】执行,就可以调试了。
到此,关于Swagger的基本使用就说到这里,希望本文对大家使用Swagger有所帮助,想要了解更多的可以通过官网学习!
最后将本次的代码放在gitee,有需要的朋友可自行下载!
地址:https://gitee.com/huang945617/netcore3—using-swagger
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)