ASP.NET Core 三种不同的 Web API 版本控制
介绍
版本控制对于人们长期使用的所有 Web API 应用程序都非常重要。例如,我们的 API 应用程序长期被公众使用,我们希望在应用程序中进行一些大范围的更改,这将影响应用程序的整个流程。显然,这些变化也会影响到以前的消费者。为了克服这种情况,最终用户也应该相应地在他们的应用程序中进行更改。这不是真正的做法,对吧?我们可以创建一个新版本的 API 并提供给客户使用,而不是更改现有的 API 应用程序。它不会影响以前的消费者。在 API 应用程序中创建版本控制的方法有三种。我们可以一一看看。
方法 1:使用 URL 路由进行版本控制
我们可以通过 URL 路由传递 API 版本,并生成不同版本的 API 控制器和方法。
我们必须使用 NuGet 包管理器安装“ Microsoft.AspNetCore.Mvc.Versioning ”库。
我们可以在 Startup 类的“ConfigureServices”方法中添加以下条目。
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
services.AddApiVersioning(options =>
{
options.ReportApiVersions = true;
options.DefaultApiVersion = new ApiVersion(1, 0);
options.AssumeDefaultVersionWhenUnspecified = true;
});
}
我们可以使用脚手架模板创建一个具有默认方法的新控制器。
我已经删除了除 GET 方法之外的所有其他方法。我还为控制器添加了版本路由属性。我在同一个文件中创建了另一个带有 GET 方法的控制器类。现在,我们有两个具有相同 GET 方法的控制器。但它会返回不同的结果。我们可以使用 Postman 工具检查结果。
using Microsoft.AspNetCore.Mvc;
using System.Collections.Generic;
namespace URLVersioning.Controllers
{
[ApiVersion("1.0")]
[Route("v{v:apiVersion}/values")]
[ApiController]
public class Values1Controller : ControllerBase
{
[HttpGet]
public IEnumerable<string> Get()
{
return new string[] { "value1 - V1", "value2 - V1" };
}
}
[ApiVersion("2.0")]
[Route("v{v:apiVersion}/values")]
[ApiController]
public class Values2Controller : ControllerBase
{
[HttpGet]
public IEnumerable<string> Get()
{
return new string[] { "value1 - V2", "value2 - V2" };
}
}
}
我们可以输入 1.0 版本的 URL。这将给出以下结果。
我们可以检查 2.0 版,您将得到以下结果。
如果查看响应标头,您可以看到支持的 API 版本。目前,我们只有两个版本。我们可以添加任意数量的。
在这种方法中,API 的现有使用者应该更改端点以适应新的变化。因为,我们已经改变了 URL 路由。这是这种方法的主要缺点。为了克服这个缺点,我们还有两种可用的方法。
方法 2:使用 HTTP Head进行版本控制
在这种方法中,我们将版本与 HTTP Head一起传递,而不是将其作为 URL 传递。我们必须在 Startup 类中为 Http Header 添加一个选项条目。
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
services.AddApiVersioning(options => {
options.ReportApiVersions = true;
options.DefaultApiVersion = new ApiVersion(1, 0);
options.AssumeDefaultVersionWhenUnspecified = true;
options.ApiVersionReader =
new HeaderApiVersionReader("X-API-Version");
});
}
我们添加了一个新的 Http Header 条目“X-API-Version”。我们可以修改控制器类的现有路由。我们不再需要路由中的版本。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
namespace HttpHeaderVersioning.Controllers
{
[ApiVersion("1.0")]
[Route("values")]
[ApiController]
public class Values1Controller : ControllerBase
{
[HttpGet]
public IEnumerable<string> Get()
{
return new string[] { "value1 - V1", "value2 - V1" };
}
}
[ApiVersion("2.0")]
[Route("values")]
[ApiController]
public class Values2Controller : ControllerBase
{
[HttpGet]
public IEnumerable<string> Get()
{
return new string[] { "value1 - V2", "value2 - V2" };
}
}
}
我们可以通过 Postman 将版本作为 Http Header 传递并查看结果。
如果您没有将任何版本作为Head传递,它将根据启动条目考虑默认版本并给出相应的结果。在我们的例子中,我们给出了 1.0 作为默认版本。
方法 3:使用 Query 参数进行版本控制
我们也可以通过查询参数来实现 API 版本控制。为此,我们必须删除 Http Header 的先前启动条目。
无需更改控制器文件。我们可以运行应用程序并使用查询参数在 Postman 中检查请求。
我们应该将查询参数作为“api-version”传递。如果您在没有任何查询参数的情况下执行请求,您将从具有默认版本的控制器获取值。在我们的例子中,1.0 是默认版本。
结论
在这篇文章中,我们看到了 ASP.NET Core Web API 应用程序的三种不同类型的版本控制。首先,我们使用了 URL 路由版本控制,然后我们通过 Http Headers 看到了版本控制。最后,我们看到了带有查询参数的第三个方式。http header 和 query param 方法都不会影响 Web API 的现有使用者。但是如果选择 URL 路由方式,则必须更改 API 的所有现有端点。
常见问题FAQ
- 程序仅供学习研究,请勿用于非法用途,不得违反国家法律,否则后果自负,一切法律责任与本站无关。
- 请仔细阅读以上条款再购买,拍下即代表同意条款并遵守约定,谢谢大家支持理解!