实用技巧

关注公众号 jb51net

关闭
首页 > 网络编程 > ASP.NET > 实用技巧 > .net 使用microsoft.aspnetcore.openapi

.NET 10 使用 Microsoft.AspNetCore.OpenApi 实现 API 版本管理的过程详解

作者:邓磊Lei

本文介绍了API版本管理的重要性及常见的版本策略,详细讲述了如何使用Microsoft.AspNetCore.OpenApi和Asp.Versioning实现基于URL路径的API版本管理,并生成独立的OpenAPI文档,感兴趣的朋友跟随小编一起看看吧

 为什么 API 版本管理如此重要?

API 版本管理的核心目标是:在不破坏现有用户的前提下,持续迭代和改进 API。通过版本管理,我们可以:

常见的版本策略有这几种:

每种方式都有适用场景,没有绝对的优劣。

在 C# 生态中,长期以来的事实标准是 Swashbuckle.AspNetCore,但它并没有内置版本管理支持,需要配合 Asp.Versioning 来实现。

终于,在 .NET 10 中,微软推出了自己的 OpenAPI 库 Microsoft.AspNetCore.OpenApi,并且 Asp.Versioning v10 也正式支持了这个库,版本管理和文档生成终于可以无缝结合了。

上手 Microsoft.AspNetCore.OpenApi 和 Asp.Versioning

要使用 Microsoft.AspNetCore.OpenApi 和 Asp.Versioning 来实现 API 版本管理,首先需要安装相关 NuGet 包:

#package: Asp.Versioning.Http 10.0.0
#package: Asp.Versioning.Mvc 10.0.0
#package: Asp.Versioning.Mvc.ApiExplorer 10.0.0
#package: Microsoft.AspNetCore.OpenApi 10.0.0
#package: Scalar.AspNetCore 2.6.0

安装完成后,在 Program.cs 中进行如下配置:

services
    .AddApiVersioning(options =>
    {
        options.DefaultApiVersion = new ApiVersion(1, 0);
        options.AssumeDefaultVersionWhenUnspecified = true;
        options.ReportApiVersions = true;
        options.ApiVersionReader = new UrlSegmentApiVersionReader();
    })
    .AddMvc()
    .AddApiExplorer(options =>
    {
        options.GroupNameFormat = "'v'V";
        options.SubstituteApiVersionInUrl = true;
    });
services.AddOpenApi("v1", options =>
{
    options.ShouldInclude = apiDescription => apiDescription.GroupName == "v1";
});
services.AddOpenApi("v2", options =>
{
    options.ShouldInclude = apiDescription => apiDescription.GroupName == "v2";
});
app.MapOpenApi();
app.MapScalarApiReference(options =>
{
    options
        .WithTitle("Users API - {documentName}")
        .AddDocuments(new[] { "v1", "v2" });
});

在上面的代码中,我们首先配置了 API 版本管理,指定了默认版本、版本读取方式等。然后,我们为每个版本配置了 OpenAPI 文档生成,确保每个版本都有独立的文档。最后,我们映射了 OpenAPI 和 Scalar API Reference 的路由。

控制器方面,我们可以使用特性来指定版本:

[ApiController]
[Route("api/v{version:apiVersion}/[controller]")]
[ApiVersion("1.0")]
public class UsersController : ControllerBase
{
    [HttpGet]
    [MapToApiVersion("1.0")]
    public IActionResult GetV1()
    {
        return Ok(new { Version = "v1", Users = new[] { "Alice", "Bob" } });
    }
}
[ApiController]
[Route("api/v{version:apiVersion}/[controller]")]
[ApiVersion("2.0")]
public class UsersV2Controller : ControllerBase
{
    [HttpGet]
    [MapToApiVersion("2.0")]
    public IActionResult GetV2()
    {
        return Ok(new { Version = "v2", Users = new[] { "Alice", "Bob", "Charlie" } });
    }
}

通过上述配置,我们就实现了基于 URL 路径的 API 版本管理,并且每个版本都有独立的 OpenAPI 文档。

这里还使用了一个叫 Scalar 的库来生成 API 参考文档。Scalar 是一个专注于生成 API 参考文档的库,支持多版本文档生成和定制化配置。通过 Scalar,我们可以轻松地为每个 API 版本生成漂亮的参考文档,方便开发者查阅。

上一张 Scalar 的图(和本项目无关)

我把实验项目的代码放在了 GitHub 上,欢迎大家参考:
https://github.com/denglei1024/openapi-apiversion

到此这篇关于.NET 10 使用 Microsoft.AspNetCore.OpenApi 实现 API 版本管理的过程详解的文章就介绍到这了,更多相关.net 使用microsoft.aspnetcore.openapi内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文