宝哥软件园

ASP中几种核心网络应用编程接口版本的比较 网

编辑:宝哥软件园 来源:互联网 时间:2021-09-03

首先,版本控制的好处:

(1)有助于在不破坏现有系统的情况下及时启动功能。

(2)它还可以帮助为选定的客户提供附加功能。

API版本控制可以通过以下不同方式进行控制:

(1)向URL添加版本或将其用作查询字符串参数,

(2)通过定制标题和接受标题

在本文中,让我们看看如何支持多个版本的ASP.NET核心网络应用编程接口。

1.创建ASP.NET核心webapi项目,并参考NuGet包:安装包微软。aspnetcore . MVC . version-version 2 . 0 . 0。

项目和安装包已经准备好了,那么我们需要将以下代码添加到Startup.cs中的ConfigureServices方法中:

如您所见,配置了3个不同的选项。

报告版本:这是可选的。但是,当设置为true时,API将在响应头中返回支持的版本信息。AssumedDefaultVersionWhen指定时为:此选项将用于不提供版本的请求。默认情况下,假设应用编程接口版本为1.0。默认应用编程接口版本:如果请求中没有指定版本,该选项用于指定要使用的默认应用编程接口版本。这将默认为版本1.0。这是所有的配置和设置。现在,我们将看到访问API版本的不同方式。

第二,通过QueryString实现版本控制

打开我们的控制器,并在上面添加ApiVersion特性,如下面的代码所示:

上面的代码是1.0版本。您还可以在不同的名称空间中创建另一个同名的控制器类,并将应用编程接口版本设置为2.0。如下图所示:

就这样。现在转到浏览器并访问控制器。您应该会看到API 1.0版本控制器的输出,因为它被设置为默认值。现在将api-version=2添加到URL中,您应该会看到API 2.0版本控制器的输出。

二、通过网址路径段实现:

查询字符串参数很有用,但是在长URL和其他查询字符串参数的情况下会很痛苦。相反,最好在URL路径中添加版本。例如:

Api/v1/values api/v2/values仍然是上述项目,只需要在v1和v2控制器中添加以下代码。如下图所示:

同样,您需要将工艺路线参数更新到所有适用的位置。有了这个变化,在访问API接口时总是需要版本号。您可以通过api/v1/values访问1.0版,通过api/v2/values访问2.0版,并在URL中更改版本号。简单,看起来更干净。

测试结果如下:

第三,通过HTTP头实现版本控制

在以上两种方法中,需要修改URL以支持版本控制。但是,如果您希望api的URL是干净的,也可以通过附加HTTP头来传输api版本信息。为此,您需要配置ApiVersionReader选项。代码如下:

突出显示的行告诉我们,标题“api-version”现在是api版本号的预期位置。确保路由属性没有版本详细信息。所以测试一下,结果如下:

当您将2.0作为值提供给“api Version”时,它将调用2.0版本控制器并返回输出。

简单易设置。但是,查询版本控制的字符串参数的方法现在将不起作用。一旦设置了标题,就不能指定查询字符串参数。如果您想同时支持这两种情况,请使用query stringor headerapiversionreader,而不是headeripversionreader。代码如下:

因此,现在支持查询字符串参数和标题。默认的查询字符串参数名是api-version,因此您可以将构造函数留空,但是如果您需要另一个名称,则需要提供它。您还可以为查询字符串参数和标题使用不同的名称。请记住,我们还将ReportApiVersions设置为true,这将返回响应头中的版本信息。见下图。

现在,让我们看看其他几个选项。

MapToApiVersion参数的用法:

MapToApiVersion属性允许将单个API操作映射到任何版本。换句话说,一个控制器支持多个版本。一个控制器可能只有版本3支持的API操作方法。在这种情况下,您可以使用MapToApiVersion。请看下面的代码。

以上代码的意思是:公共字符串Get()只在1.0版本支持,公共字符串Getv3()只在3.0版本支持。

有图片也有实景,非常灵活,我很喜欢。

弃用参数的用法:

当支持多个API版本时,随着时间的推移,一些版本最终会被丢弃。要将一个或多个api版本标记为过时,只需用弃用来修饰您的控制器。这并不意味着不支持API版本。你还是可以叫这个版本。只是让调用API的用户意识到以后会丢弃以下版本的一种方式。

将上面的“已弃用”设置为“真”意味着1.0版本将在未来被弃用。在访问我们的API接口时,可以在响应头中看到以下信息,如下图所示:

ApiVersionNeutral功能的使用:

ApiVersionNeutral属性定义了此API不再支持版本控制。这对于行为完全相同的API非常有用,无论它们支持API版本控制还是不支持版本控制的旧API。因此,您可以添加ApiVersionNeutral属性来退出版本控制。

获取版本信息(版本信息)

如果您想知道正在访问哪个版本的客户端,可以通过以下代码实现此功能:

综上所述,拥有多个版本的API可以帮助以有效的方式引入增强的功能,并且跟踪更改也很方便。在本文中,我们已经看到了如何在ASP.NET CoreWeb API中添加对多个版本的支持。nuget包通过查询字符串参数、添加路径段和向URL传递头来支持版本控制。还具有单版本API操作和从版本中选择退出的功能。

没有第三方包的帮助,你能实现一个API的版本控制吗?有一些方法,让我们继续。

第四,终极版(无任何NuGet包)ASP.NET核心网API版本控制

创建新的核心应用编程接口项目:

在VersionControl文件夹下,创建一个名为spaceeversionroutingconvent的新类,该类实现了IApplicationModelConvention接口。代码如下:

公共类名spaceversionroutingconventi on : iappreplicationmodel conventi on { private readonly string API prefix;private const字符串URl TEMPLATE=“{ 0 }/{ 1 }/{ 2 }”;public namespace versionroutingconventi on(字符串APi prefix=' API '){ this . APi prefix=APi prefix;} public void Apply(application model application){ foreach(var控制器在应用程序中。控制器){ var hasRouteAttribute=控制器。选择器。Any(x=x.AttributeRouteModel!=null);if(!hasRouteAttribute){ continue;} var nameSpaces=控制器。ControllerType.Namespace.Split(' . ');//获取namespace中的版本号part varversion=namespace . first ordefault(x=regex . ismatch(x,@ ' v( d)$ ');if(字符串。IsNullOrEmpty(版本)){继续;}字符串模板=字符串。格式(urlTemplate、apiPrefix、版本、控制器。ControllerName);控制器。选择器[0]。attributeroutermodel=new attributeroutermodel(){ Template=Template };}}}调试代码发现,这个方法只有在程序第一次运行时才会执行,之后不会多次执行,所以效率很高。

动词(verb的缩写)总结:

通过以上两个版本的实现和比较,我更倾向于通过第三方包实现版本控制,功能更强大。这纯粹是个人爱好。可以根据不同的场景决定用哪种方式。好的,给你,谢谢。希望对你有帮助。也希望大家多多支持我们。

更多资讯
游戏推荐
更多+