脚本宝典收集整理的这篇文章主要介绍了使用.NET 6开发TodoList应用(21)——实现API版本控制,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
API接口版本管理,对于一些规模稍大的企业应用来说,是经常需要关注的一大需求。尽管我们的示例程序TodoList很简单,但是我们也可以通过这个应用程序,来实践一下如何管理API接口版本。
实现API接口版本管理。
要实现API版本管理,我们需要这个库:Microsoft.AspNetCore.Mvc.Versioning
。它提供了.NET Web项目接口的版本管理功能。
向Api
项目中添加Microsoft.AspNetCore.Mvc.Versioning
包。并添加一个扩展方法:
ApiServiceextensions.cs
using Microsoft.AspNetCore.Mvc;
namespace TodoList.Api.Extensions;
public static class ApiServiceExtensions
{
public static void configureApiVersioning(this IServiceCollection services)
{
services.AddApiVersioning(options =>
{
// 向响应头中添加API版本信息
options.ReportApiVersions = true;
// 如果客户端不显式指定API版本,则使用默认版本
options.AssumeDefaultVersionWhenUnsPEcified = true;
// 配置默认版本为1.0
options.DefaultApiVersion = new ApiVersion(1, 0);
});
}
}
Program.cs
// 省略其他...
builder.ConfigureLOG();
builder.Services.ConfigureApiVersioning();
ApiVersion
属性我们复制一份TodoITemController
到新文件TodoItemV2Controller
并修改类名和构造函数,其他保持原样。为了给Controller标记对应的API版本号,我们分别向两个Controller上添加属性:
[ApiVersion("2.0")]
[Route("/todo-item")]
[ApiController]
public class TodoItemV2Controller : ControllerBase
{
private readonly IMediator _mediator;
// 省略其他...
}
以及
[ApiVersion("1.0")]
[Route("/todo-item")]
[ApiController]
public class TodoItemController : ControllerBase
{
private readonly IMediator _mediator;
// 省略其他..
}
启动Api
项目,执行查询TodoItem
的请求:
-** 响应** 日志输出:
api-supported-versions
:
api-version
启动Api
项目,执行查询TodoItem
的请求:
请求
响应 日志输出:
api-supported-versions
:
为了实现这一点,需要在ConfigureApiVersioning
中增加配置:
ApiServiceExtensions.cs
// 省略其他...
// 指定请求头中携带用于指定API版本信息的字段
options.ApiVersionReader = new HeaderApiVersionReader("api-version");
启动Api
项目,执行查询TodoItem
的请求:
请求
响应 日志输出:
api-supported-versions
:
除了这种之外的以上几种方法,都不需要修改接口的URI,而这种方式需要修改URI路径。我们在两个Controller上修改URI如下:
[ApiVersion("2.0")]
[Route("/{v:apiVersion}/todo-item")]
[ApiController]
// 省略其他...
启动Api
项目,执行查询TodoItem
的请求:
请求
响应 日志输出:
api-supported-versions
:
有的时候我们需要标记一个版本的请求为deprecated
,但是还不想完全删除这个Controller,可以用下面的方式进行标记,这样返回头中会指出这个版本的API已经处于deprecated
状态了。
[ApiVersion("2.0", Deprecated = true)]
[Route("/{v:apiVersion}/todo-item")]
[ApiController]
// 省略其他...
或者在ConfigureApiVersioning
中使用Convention进行标记:
// 省略其他...
// 使用Convention标记deprecated
options.Conventions.Controller<TodoItemV2Controller>().HasDeprecatedApiVersion(new ApiVersion(2, 0));
我们再请求2.0版本的API时,仍然可以获取数据,但是得到的返回头中信息如下:
在本文中我们使用多种方式实现了管理API版本的需求,可以根据具体的需要选择一种进行实现。下一篇我们介绍关于响应的缓存实现。
以上是脚本宝典为你收集整理的使用.NET 6开发TodoList应用(21)——实现API版本控制全部内容,希望文章能够帮你解决使用.NET 6开发TodoList应用(21)——实现API版本控制所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。