API 版本控制允许开发人员在不破坏现有客户端的情况下对 API 进行更改或增强。API 版本控制的好处是,它可以提高 API 的可维护性、灵活性和安全性。
API 版本控制的常用方法有以下几种:.
-
使用 URL 路径来区分不同版本的 API,例如 /api/v1/demo 和 /api/v2/demo。 -
使用查询字符串参数来指定 API 的版本,例如 /api/demo?version=1 和 /api/demo?version=2。 -
使用 HTTP 头部来传递 API 的版本信息,例如 api-version: 1
在本文中,我们将介绍如何使用最小 API 来实现这三种版本控制方法。
使用 URL 路径来区分不同版本的 API
在 ASP.NET Core 中,我们可以使用 MapGet() 方法来定义一个 GET 请求的路由,例如:
app.MapGet("/api/demo", () => "Hello MyIO");
在上面的代码中,我们定义了一个 GET 请求的路由,该路由为 /api/demo。
要为该路由添加版本支持,我们首先需要引用 Nuget 包 Asp.Versioning.Http
,并在 Program.cs 文件中添加以下代码,以启用 API 版本控制:
builder.Services.AddApiVersioning(options =>
{
options.ApiVersionReader = new UrlSegmentApiVersionReader();
});
然后,我们需要创建一个版本集,告诉 API 版本控制系统哪些版本可供使用:
var versionSet = app.NewApiVersionSet()
.HasApiVersion(1.0)
.HasApiVersion(2.0)
.ReportApiVersions()
.Build();
最后,我们需要修改路由,以便为每个版本定义一个路由,例如:
app.MapGet("/api/v{version:apiVersion}/demo", () => "Hello MyIO 1.0").WithApiVersionSet(versionSet).HasApiVersion(new ApiVersion(1, 0));
app.MapGet("/api/v{version:apiVersion}/demo", () => "Hello MyIO 2.0").WithApiVersionSet(versionSet).HasApiVersion(new ApiVersion(2, 0));
在上面的代码中, {version:apiVersion} 是一个占位符,它表示 API 的版本,例如 /api/v1/demo 和 /api/v2/demo。
我们可以在 Postman 中验证这一点:
使用查询字符串参数来指定 API 的版本
要使用查询字符串参数来指定 API 的版本,我们需要替换掉上个示例中的 ApiVersionReader:
builder.Services.AddApiVersioning(options =>
{
options.ApiVersionReader = new QueryStringApiVersionReader("version");
});
然后,去掉路由中的版本信息:
app.MapGet("/api/demo", () => "Hello MyIO 1.0").WithApiVersionSet(versionSet).HasApiVersion(new ApiVersion(1, 0));
app.MapGet("/api/demo", () => "Hello MyIO 2.0").WithApiVersionSet(versionSet).HasApiVersion(new ApiVersion(2, 0));
Postman 测试一下:
使用 HTTP 头部来传递 API 的版本信息
要使用 HTTP 头部来传递 API 的版本信息,我们需要使用新的 ApiVersionReader:
builder.Services.AddApiVersioning(options =>
{
options.ApiVersionReader = new HeaderApiVersionReader("api-version");
});
Postman 测试一下:
总结
本文介绍了如何对最小 API 进行版本控制,具体方式如下:
-
使用 URL 路径来区分不同版本的 API -
使用查询字符串参数来指定 API 的版本 -
使用 HTTP 头部来传递 API 的版本信息