问题标签 [api-versioning]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
147 浏览

c# - 为什么在使用 swashbuckle 时会出错?

我在我的 API 项目中安装了“swashbuckle”,但是当我尝试打开 swagger UI 页面时,出现以下错误

我的 Swashbuckle 版本是 5.6.0,.Net 框架是 4.6.1。我也在使用 api 版本控制。请建议如何解决此问题。

0 投票
1 回答
473 浏览

python - Django REST Framework URLPathVersioning 不起作用

我按照此处的指南将版本控制添加到我们的 API。这是看起来的urls.py样子:

但是,当我使用 URL 访问http://localhost:5555/v1/foo/bar我的 API 时,出现错误:

0 投票
0 回答
44 浏览

c# - 如何跨模型的不同版本重用业务验证

我有一个具有多个版本的 ASP.Net Core WebAPI,并注入了相应版本的服务层。

每个版本都有自己的模型版本。V1 Controller,注入V1服务层,使用V1模型,服务层做业务验证。

现在来了 V2 版本的控制器,它注入了 V2 服务层并使用 V2 模型(继承自 V1 模型)。

我可以在 V2 服务层中重用大部分(如果不是全部)V1 服务层业务验证的最佳方法是什么?

有什么模式能帮上忙吗?

结构:

0 投票
2 回答
503 浏览

asp.net-web-api - 如何检索我的 api 的所有已实现版本的列表?

我在我的 WebApi 项目中使用aspnet-api-versioning ,它工作正常。版本不是硬编码的,它们是从命名空间中检索的。

现在我想检索已经实现的版本列表。我想创建一些端点(我们称之为GetApiVersions),用户可以调用它来检索现有 api 版本号的简单集合,例如 [1, 2, 3]。

在负责根据检索到的请求(CurrentImplementationApiVersionSelector,SelectVersion方法)选择正确的 api 版本的代码中,有一个ApiVersionModel带有ImplementedApiVersions属性的参数。

ImplementedApiVersions属性似乎正是我所需要的,但我不知道如何在我的GetApiVersions端点中访问它。有没有办法找回它?或者有没有其他方法可以以编程方式检索已实现的 api 版本列表?

0 投票
2 回答
2301 浏览

c# - 使用 Microsoft.AspNet.WebApi.Versioning 的 Web API 2 版本控制

我正在使用ASP.NET 版本控制库,我已按照步骤将此库添加到一个非常基本的 ASP.NET Web API 2 项目中,这是我的文件的内容: Global.asax文件:

Web API 配置:

第一个控制器:

第二个控制器:

当我运行应用程序并导航到这个 url 时:http://localhost:5428/api1/values?api-version=1.0我得到了想要的结果,但是当我导航到这个 url 时:http://localhost:5428/api1/values?api-version=2.0我遇到一条错误消息,指出No route providing a controller name with API version '2.0' was found to match request URI 'http://localhost:5428/api1/values',我想知道我在这个基本设置中缺少什么?

如果我[ControllerName]从没有任何变化中删除属性ValuesController2并且问题仍然存在。

我试图改变第二个控制器的命名空间,但它也没有解决问题!

我正在使用这个库的3.0.1版本。

0 投票
3 回答
4014 浏览

asp.net-mvc - .NET Core WebAPI 在缺少次要版本的情况下回退 API 版本

经过多次尝试和阅读文章,我决定将我的问题放在这里。我想要的是以下内容:我正在研究应用程序的 api 版本。.NET Core(包)支持的版本格式Microsoft.AspNetCore.Mvc.Versioning是 Major.Minor,这就是我想在我从事的项目中使用的格式。我想要的是一个备用版本,以防客户端未指定次要版本。我正在使用 .NET core 2.2,并api-version在标题中指定。相应的 API 版本控制配置如下所示:

每个版本我都有以下两个控制器:(为了这个 SO 问题,控制器被简化了):

如果客户端指定api-version=1.0,则使用 ValueControllerV10。当然,如果客户端指定api-version=1.1,则按预期使用 ValueControllerV11。

现在我的问题来了。如果客户端指定api-version=1(因此只有主要版本没有次要版本),则使用 ValueControllerV10。这是因为ApiVersion.Parse("1")等于ApiVersion.Parse("1.0"),如果我没记错的话。但在这种情况下,我想要的是调用给定主要版本的最新版本,在我的示例中为 1.1。

我的尝试:

第一:指定[ApiVersion("1")]ValueControllerV11

它不起作用,它导致

为了解决这个问题,我想出了第二种方法:

第二:使用自定义IActionConstraint。为此,我关注了这些文章:

然后我创建了以下类:

并用于ValueControllerV11

好吧,它解决了AmbiguousMatchException,但是覆盖了Microsoft.AspNetCore.Mvc.Versioningpackage 的默认行为,所以如果客户端使用api-version 1.1,那么她会得到一个 404 Not Found ,根据实现是可以理解的HttpRequestPriority

第三:有条件地使用MapSpaFallbackRoutein Startup.cs

它也不起作用,没有任何影响。这个名字MapSpaFallbackRoute也给我一种感觉,它不是我需要使用的......

所以我的问题是:如果没有指定次要版本,我该如何引入后备“使用最新”行为api-version?提前致谢!

0 投票
1 回答
381 浏览

asp.net-web-api - 加载插件时如何在通用控制器上设置 api 版本?

我有一些插件,它们基本上是输入和输出类型定义。我有一个可以添加到 mvc 管道的通用控制器。一切正常。

但我无法在这个通用控制器上设置 api 版本。我知道您可以根据控制器类顶部的属性进行设置。但是由于您不能拥有这种动态(属性),因此我无法为通用控制器的每个实例设置版本。

目前我只是在运行时为每个实例编译控制器并使用 roslyn 编译器注册 i 。

有没有办法在 mvc 管道中注册控制器的管道中的某处设置 api-version 并以不同的 api 版本端点结束。

0 投票
1 回答
82 浏览

android - 当我在 api 级别 19 中调用 stopForeground 时,服务将销毁

当我在 api 级别 19 中调用 stopForeground 时,服务将被破坏,但是当我在 api 级别 24 中调用 stopForeground 时,服务不会被破坏 谁能帮我找出 api 级别 20、21、22 和 23 中的这种情况?

0 投票
2 回答
966 浏览

c# - 需要apiversioning版本的asp net core中间件

我有一个带有 API 版本控制的 MVC net core 2.2 应用程序。我只希望中间件为 api 的 v2 或更高版本运行。

我编写的中间件类使用IApiVersionReader.Read(), 但是似乎直到UseMVCStartup.

所以如果我之前注册了我的中间件UseMVC,那么它无法使用版本控制方法读取版本。

但是,如果我将中间件放在该UseMVC行之后,则它根本不会触发。

感觉就像鸡和蛋的情况!我怎样才能让它工作?

为简洁起见,这是我的创业公司的简化版本。

0 投票
1 回答
443 浏览

firebase - 使用 Firestore 后端进行版本控制的最佳实践

使用经典 REST api,最好将版本添加到 api url。这个版本可以是fi。嵌入路径 ( api.myservice.com/v1/dataset) 或作为参数 ( api.myservice.com/dataset?v=1)。当部署新版本的 api 时,只要需要,它就可以与旧版本并存。旧版本的 API 可以标记为已弃用,最终可以删除。

这为前端提供了适应新版本 API 的宽限期,因此在后端更新、前端开发人员对此进行调整和前端用户进行更新之间没有停机时间。

当我们使用 Firestore 或任何类似的实时数据库时,前端可以直接访问数据库。数据库的结构可以更改,列或表可以重命名、移动或删除。没有 API 可以为前端抽象出这种底层结构。那么,使用实时数据库向前端 - 后端通信添加某种版本控制的最佳方式是什么?

可能的解决方案:

  • 无论如何都要使用 REST api 作为包含版本的额外层。缺点:使用这种方法,您将失去实时数据库的优势,例如实时更新和用户管理。

  • 将抽象层移至前端并公开所需的最低版本。如果前端不满足此版本,则强制更新前端。缺点:相信前端会做正确的事,而不是强制执行。

  • 将版本添加到项目名称或表名称中。这将导致大量额外的冗余,其中数据必须不断保持同步。这可能会导致额外的成本并且容易出错。

  • 任何其他?

这些选项对我来说似乎都不是好主意。如果前端可以直接访问数据,最好的解决方案是什么?我知道这个问题很快就会被标记为“太宽泛”。如果是,请告诉我如何集中我的问题。