什么是swagger
swagger是一款RESTFUL接口的文档在线自动生成+功能测试功能软件。Swagger是一个规范和完整的框架,用于生成、描述、调用和可视化RESTful风格的Web服务。
简单来讲,使用swagger能够自动生成友好的在线接口文档,并且支持接口测试,其好处:
- 对后端人员:减少了编写接口后还要花费时间同步更新接口文档,且与前端沟通的时间成本。
- 对前端人员:能够直观的快速的看到接口,并且进行在线测试,方便了调试调用接口,不用因接口问题频繁与后端沟通。
简单使用
步骤
框架.net3.1默认没有swagger,需要自己弄,以下简单写步骤
nuget安装
1
Install-Package Swashbuckle.AspNetCore
Startup.cs文件引入命名空间
1
2using Swashbuckle.AspNetCore.Swagger;
using Microsoft.OpenApi.Models;将 Swagger 生成器添加到
Startup.ConfigureServices
方法中的服务集合中1
2
3
4
5//注册Swagger生成器,定义一个和多个Swagger 文档
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo { Title = "My API", Version = "v1" });
});在
Startup.Configure
方法中,启用中间件为生成的 JSON 文档和 Swagger UI 提供服务1
2
3
4
5
6
7//启用中间件服务生成Swagger作为JSON终结点
app.UseSwagger();
//启用中间件服务对swagger-ui,指定Swagger JSON终结点
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
});此时启动项目就可通过
http://localhost:<port>/swagger
地址访问Swagger UI浏览API文档。也可通过
http://localhost:<port>/swagger/v1/swagger.json
地址访问生成的描述终结点的json文档。如果要想通过
http://localhost:<port>/
就访问Swagger UI,修改启用中间件SwaggerUI的方法UseSwaggerUI
,把RoutePrefix
属性设置为空字符串。1
2
3
4
5app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
c.RoutePrefix = string.Empty;
});
添加版本控制
步骤
添加API枚举类型
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15/// <summary>
/// 版本控制
/// </summary>
public enum ApiVersion
{
/// <summary>
/// v1版本
/// </summary>
V1 = 1,
/// <summary>
/// v2版本
/// </summary>
V2 = 2
}修改
Startup.ConfigureServices
里注册Swagger的代码1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27//注册Swagger生成器,定义一个和多个Swagger 文档
services.AddSwaggerGen(c =>
{
//遍历版本信息
typeof(ApiVersion).GetEnumNames().ToList().ForEach(version =>
{
c.SwaggerDoc(version, new OpenApiInfo
{
Version = version, //版本号
Title = $"My API {version}", //标题
Description = $"My ASP.NET Core Web API {version}", //描述
//上面三项最后设置,下面的三项可以不用
TermsOfService = new Uri("https://example.com/terms"), //服务条款
Contact = new OpenApiContact
{
Name = "Singo", //联系人
Email = string.Empty, //邮箱
Url = new Uri("https://github.com/hushitong"),//网站
},
License = new OpenApiLicense
{
Name = "Use under LICX", //协议
Url = new Uri("https://example.com/license"), //协议地址
}
});
});
});修改
Startup.Configure
里启用中间件的设置1
2
3
4
5
6
7
8
9
10
11
12
13
14
15//启用中间件服务生成Swagger作为JSON终结点
app.UseSwagger();
//启用中间件服务对swagger-ui,指定Swagger JSON终结点
app.UseSwaggerUI(c =>
{
c.RoutePrefix = string.Empty;
typeof(ApiVersion).GetEnumNames().ToList().ForEach(version =>
{
//描述终结点的json文档
c.SwaggerEndpoint($"/swagger/{version}/swagger.json", version);
//设置为none可折叠所有方法
c.DocExpansion(Swashbuckle.AspNetCore.SwaggerUI.DocExpansion.None);
});
});然后就是使用ApiExplorerSettingsAttribute标注各个版本Controller,然后修改路由信息
原来的标注为
1
[ ]
后来的根据需要标注
1
[ ]
启动后就可以通过右上角的下拉框选择需要的版本进行测试了
注意
有关版本控制实际有很多办法,如:可以查看Net Core WebApi几种版本控制对比
添加JWT支持
修改
Startup.ConfigureServices
里注册Swagger的代码1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31//注册Swagger生成器,定义一个和多个Swagger 文档
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo { Title = "My API", Version = "v1" });
c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme()
{
Description = "在下框中输入请求头中需要添加Jwt授权Token:Bearer Token",
Name = "Authorization", //设置其key名,请求时会添加上,默认使用Authorization名
In = ParameterLocation.Header, //在请求头添加JWT Token
Type = SecuritySchemeType.ApiKey,
BearerFormat = "JWT",
Scheme = "Bearer"
});
c.AddSecurityRequirement(new OpenApiSecurityRequirement
{
{
new OpenApiSecurityScheme
{
Reference = new OpenApiReference {
Type = ReferenceType.SecurityScheme,
Id = "Bearer"
}
},
new string[] { }
}
});
});运行进入SeaggerUI页面,可以看到在页面右上角多了一个
Authorize
按钮,点击在value框可以填入bear <your jwt string>
,以后请求头都会带上Authorization: bear <your jwt string>