ASP.NET Core 三种不同的 Web API 版本控制

作者 : 慕源网 本文共2953个字,预计阅读时间需要8分钟 发布时间: 2021-12-3 共330人阅读

介绍

版本控制对于人们长期使用的所有 Web API 应用程序都非常重要。例如,我们的 API 应用程序长期被公众使用,我们希望在应用程序中进行一些大范围的更改,这将影响应用程序的整个流程。显然,这些变化也会影响到以前的消费者。为了克服这种情况,最终用户也应该相应地在他们的应用程序中进行更改。这不是真正的做法,对吧?我们可以创建一个新版本的 API 并提供给客户使用,而不是更改现有的 API 应用程序。它不会影响以前的消费者。在 API 应用程序中创建版本控制的方法有三种。我们可以一一看看。

方法 1:使用 URL 路由进行版本控制

我们可以通过 URL 路由传递 API 版本,并生成不同版本的 API 控制器和方法。

我们必须使用 NuGet 包管理器安装“ Microsoft.AspNetCore.Mvc.Versioning ”库。

我们可以在 Startup 类的“ConfigureServices”方法中添加以下条目。

ASP.NET Core 三种不同的 Web API 版本控制

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 工具检查结果。

ValuesController.cs
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。这将给出以下结果。

ASP.NET Core 三种不同的 Web API 版本控制

我们可以检查 2.0 版,您将得到以下结果。

ASP.NET Core 三种不同的 Web API 版本控制

如果查看响应标头,您可以看到支持的 API 版本。目前,我们只有两个版本。我们可以添加任意数量的。

ASP.NET Core 三种不同的 Web API 版本控制

在这种方法中,API 的现有使用者应该更改端点以适应新的变化。因为,我们已经改变了 URL 路由。这是这种方法的主要缺点。为了克服这个缺点,我们还有两种可用的方法。

方法 2:使用 HTTP Head进行版本控制

在这种方法中,我们将版本与 HTTP Head一起传递,而不是将其作为 URL 传递。我们必须在 Startup 类中为 Http Header 添加一个选项条目。

ASP.NET Core 三种不同的 Web API 版本控制

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”。我们可以修改控制器类的现有路由。我们不再需要路由中的版本。

ValuesController.cs
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 传递并查看结果。

ASP.NET Core 三种不同的 Web API 版本控制

如果您没有将任何版本作为Head传递,它将根据启动条目考虑默认版本并给出相应的结果。在我们的例子中,我们给出了 1.0 作为默认版本。

ASP.NET Core 三种不同的 Web API 版本控制

方法 3:使用 Query 参数进行版本控制

我们也可以通过查询参数来实现 API 版本控制。为此,我们必须删除 Http Header 的先前启动条目。

ASP.NET Core 三种不同的 Web API 版本控制

无需更改控制器文件。我们可以运行应用程序并使用查询参数在 Postman 中检查请求。

ASP.NET Core 三种不同的 Web API 版本控制

我们应该将查询参数作为“api-version”传递。如果您在没有任何查询参数的情况下执行请求,您将从具有默认版本的控制器获取值。在我们的例子中,1.0 是默认版本。

ASP.NET Core 三种不同的 Web API 版本控制

结论

在这篇文章中,我们看到了 ASP.NET Core Web API 应用程序的三种不同类型的版本控制。首先,我们使用了 URL 路由版本控制,然后我们通过 Http Headers 看到了版本控制。最后,我们看到了带有查询参数的第三个方式。http header 和 query param 方法都不会影响 Web API 的现有使用者。但是如果选择 URL 路由方式,则必须更改 API 的所有现有端点。


慕源网 » ASP.NET Core 三种不同的 Web API 版本控制

常见问题FAQ

程序仅供学习研究,请勿用于非法用途,不得违反国家法律,否则后果自负,一切法律责任与本站无关。
请仔细阅读以上条款再购买,拍下即代表同意条款并遵守约定,谢谢大家支持理解!

发表评论

开通VIP 享更多特权,建议使用QQ登录