问题标签 [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 投票
1 回答
163 浏览

asp.net-web-api - 如何使用更高版本的 web api 控制器

我在下面关注: https ://www.hanselman.com/blog/ASPNETCoreRESTfulWebAPIVersioningMadeEasy.aspx

是否可以直接为 Web api 控制器提供更高版本。喜欢:

使用上述一个时,它仅在使用 URL as 时有效,但在使用 URL as和获取消息api/v2.05/ger/getDetail 时失败api/ger/getDetail"Code": "ApiVersionUnspecified",

如果将版本从 2.05 更改为 1.0(与所有其他控制器一样),则api/ger/getDetail可以使用。

如何解决这个问题,我需要这个控制器的 2.05 并且还需要访问api/ger/getDetailURL。

谢谢

0 投票
1 回答
1516 浏览

asp.net-core - 当我有多个版本的 API 时,如何填充 swagger 文档的基本路径?

我正在使用 Swashbuckle.AspNetCore 生成我的招摇文档,并且我正在使用ApiVersion对我的控制器进行版本控制。我的设置支持多个版本,这很好用。这意味着我可以在 Swagger UI 中选择一个版本,并且我为每个版本创建了一个 swagger 文档,其中只有相关的操作。

但是,我想重构 swagger 文档以便更好地利用 basepath 属性。

例如,让我使用为我的 API 版本 1 生成的 swagger 文档。在本文档中,所有路径都以 开头"/api/v1/...",生成的 swagger 文档中没有基本路径。但是,我想要的是,我的所有路径都以 开头"/...",并且生成的文档包含一个值为 的 basepath 属性"/api/v1"

我曾尝试创建一个 DocumentFilter,它让我很接近,但并非一直如此。没错,我可以访问该GroupName属性(它包含版本字符串“v1”),但我的谓词显然失败了,因为值为swaggerDoc.Info.Version“1.0”。这就是今天课程的样子:

然后我尝试了另一种方法,PreSerializeFilters首先将基本路径添加到 swagger 文档中,然后再次将其从文档中的路径中删除。这也让我非常接近,但失败了,因为PreSerializeFilters不是为每个 swagger 文档执行一次,而是一次(因此指定的最后一个基本路径将在所有生成的文档中使用)。这是我使用的代码PreSerializeFilters

任何人都可以帮我走最后一英里,并按照我想要的方式进行吗?

0 投票
1 回答
31 浏览

api - 使用来自 WebApiConfig 的 url 版本控制 api

我的问题是,例如,如果我需要为很多控制器使用此代码

我是否必须为我在 api 中拥有的每个控制器复制此代码?!!

例如有没有这样的方法。

我知道它错了,但我怎样才能为这个问题做正确的解决方案?

0 投票
3 回答
1834 浏览

c# - 是否可以在控制器的 ApiVersion 属性中包含下划线?

我继承了一个遗留的 WebAPI 系统,该系统目前在路由模式中使用下划线来表示版本。例如/api/1_0/account/api/1_1/account等等。

我正在尝试更新自动生成的文档以使用 Swagger,但是使用ApiVersion包含下划线的属性的显式路由会导致异常。例如,这很好用:

但是,这会引发异常:

例外是:

FormatException:指定的 API 版本状态“_1”无效。
System.InvalidOperationException:“无法比较数组中的两个元素。”
在 System.Collections.Generic.ArraySortHelper`1.Sort(T[] 键,Int32 索引,Int32 长度,IComparer`1 比较器)
在 System.Array.Sort[T](T[] 数组,Int32 索引,Int32 长度, IComparer`1 比较器)
在 System.Collections.Generic.List`1.Sort(Int32 索引,Int32 计数,IComparer`1 比较器)
在 Microsoft.Web.Http.Dispatcher.ApiVersionControllerSelector.InitializeControllerInfoCache()
在 System.Lazy`1。 CreateValue()
在 System.Lazy`1.LazyInitValue()
在 System.Lazy`1.get_Value()
在 Microsoft.Web.Http.Dispatcher.ApiVersionControllerSelector.GetControllerMapping()
在 System.Web.Http.Routing.AttributeRoutingMapper.AddRouteEntries(SubRouteCollection 收集器,HttpConfiguration 配置,IInlineConstraintResolver constraintResolver,IDirectRouteProvider directRouteProvider)
在 System.Web.Http.Routing.AttributeRoutingMapper。 <>c__DisplayClass1_1.b__1()
在 System.Web.Http.Routing.RouteCollectionRoute.EnsureInitialized(Func`1 初始化程序)
在 System.Web.Http.Routing.AttributeRoutingMapper.<>c__DisplayClass1_0.b__0(HttpConfiguration config)
在 System.Web。
E:\ProjectPath\Foo.cs:line 25 中 ProjectName.Startup.Configuration(IAppBuilder app) 处的Http.HttpConfiguration.EnsureInitialized()

问题很明显,但是如何在版本属性值中包含下划线?问题令人困惑,因为我假设类的内部(在某些时候)将值解析为整数,但属性本身接受字符串......?那为什么会这样呢?

0 投票
1 回答
351 浏览

rest - REST API GROUP 版本控制

有人知道 REST API 中的组版本控制是什么吗?我在下面找到了解释它的链接,但我不明白如何使用它。

我在寻找:

  1. 如何跨多个端点配置组版本?
  2. 有人可以提供它的实际例子吗?

Github 微软 API 指南

0 投票
3 回答
2203 浏览

asp.net-mvc - 如何在 ASP.NET Boilerplate Web API 中进行版本控制?

我正在尝试在 ASP.NET 样板框架中进行版本控制。

我在 Swagger Gen 中创建了两个版本(“v1.0”和“v2.0”)并为 Web API 设置了 API 版本,但每次我从 Swagger 获得两个版本的所有 API 时。

启动.cs

AddSwaggerGenConfigureServices()

UseSwaggerUI在配置()中:

API 控制器 - v1.0

API 控制器 - v2.0

输出

大摇大摆的版本 v1 输出

在此处输入图像描述

0 投票
0 回答
198 浏览

razor - 添加 aspnet-api-versioning 可防止 UrlHelper 在 Razor 页面请求中生成控制器 API 路由

我可以创建一个文件-> 新的 aspnetcore API 项目并使用它IUrlHelper按名称生成路由,而不会出现任何问题。

当响应被发回时,我正确地拥有了我创建的路由:

然后,我可以使用 Visual Studio Scaffolding 创建 Razor 页面并继续生成相同的路线,而不会在我的 Razor 页面中出现任何问题:

模型

这使得路线没有问题。

如果我添加aspnet-api-versioningnuget 包并配置它的服务:

我的 API 控制器继续使用以下修改。任何发往此控制器的请求都会正确生成路由。

但是,当我们尝试从 Razor Pages 请求中生成路由时,Razor Pages 停止工作。该RouteUrl方法现在返回 null。我已经尝试更新提供给该RouteUrl方法的路线数据,以便我通过硬编码版本(用于测试)并且它也不起作用。

是否需要在 api 版本控制包上进行任何配置以支持页面?我们有剃须刀页面,我们想要生成 API 路由以在页面中呈现,但它似乎不起作用。

0 投票
1 回答
2990 浏览

api - Symfony 中的 API 版本控制

我一直在尝试在 Symfony 中找到版本控制的解决方案。在 Symfony 中进行 API 版本控制的最佳方法是什么。在 Laravel 中,这非常简单,请参见此处

您只需将不同文件夹(如 V1/V2...)中的所有内容分开,然后创建指向该文件夹(命名空间)的路由。但是 Symfony 的工作方式不同,它使用注解来创建路由

0 投票
1 回答
5096 浏览

spring - 进行微服务 REST API 版本控制的最佳方法是什么?

我正在使用 Spring 开发这个项目并在 AWS EC2 实例中托管。由于很少有新的需求出现,我不得不更改我的 API 合同。但我不想破坏当前的客户。所以,我正在尝试使用版本控制来实现一些 REST API。这样每当我更新端点时,消费者应用程序就不会崩溃。但我对如何进行 API 版本控制感到困惑。我想到了两种方法。

  1. 在同一服务器中创建下一个版本端点,(在春天使用 RequestMaping("/v1/api1"),RequestMaping("/v2/api1") 类似这样的东西。)

  2. 其他明智的做法是在新服务器实例中完全运行 v2 API,但保持相同的 API 端点足迹并使用 AWS APIGateway 作为代理并在那里配置版本控制,然后根据请求中的版本号路由到旧服务器和新服务器。

但我相信第一种方法会导致大量代码重复和代码管理混乱。因为我们通过变化保持相同的功能。

在第二种方法中,如果我的版本增加,我必须为机器人版本保留两组实例,然后很难管理这些实例,特别是当我将拥有大约 15 个微服务实例时。而且它也不具有成本效益。因为我的公司是一家初创公司,所以我也需要考虑这个事实。

是否有关于 API 版本控制和管理多个端点版本的最佳实践?我愿意接受任何建议和指导。如果多台服务器也是解决方案,我愿意重新考虑成本限制。我需要这个问题的最佳解决方案。

0 投票
2 回答
189 浏览

java - 如何根据 HTTP 标头值在 RestController 之间切换?

我们正在考虑在 Spring Boot 应用程序中使用标头字段来指定 REST API 版本。

我们如何告诉 Spring Boot 根据标头值重定向调用?

我梦想着这样的事情:

对于这样的 HTTP 请求: