问题标签 [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.
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/getDetail
URL。
谢谢
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
:
任何人都可以帮我走最后一英里,并按照我想要的方式进行吗?
api - 使用来自 WebApiConfig 的 url 版本控制 api
我的问题是,例如,如果我需要为很多控制器使用此代码
我是否必须为我在 api 中拥有的每个控制器复制此代码?!!
例如有没有这样的方法。
我知道它错了,但我怎样才能为这个问题做正确的解决方案?
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()
问题很明显,但是如何在版本属性值中包含下划线?问题令人困惑,因为我假设类的内部(在某些时候)将值解析为整数,但属性本身接受字符串......?那为什么会这样呢?
rest - REST API GROUP 版本控制
有人知道 REST API 中的组版本控制是什么吗?我在下面找到了解释它的链接,但我不明白如何使用它。
我在寻找:
- 如何跨多个端点配置组版本?
- 有人可以提供它的实际例子吗?
razor - 添加 aspnet-api-versioning 可防止 UrlHelper 在 Razor 页面请求中生成控制器 API 路由
我可以创建一个文件-> 新的 aspnetcore API 项目并使用它IUrlHelper
按名称生成路由,而不会出现任何问题。
当响应被发回时,我正确地拥有了我创建的路由:
然后,我可以使用 Visual Studio Scaffolding 创建 Razor 页面并继续生成相同的路线,而不会在我的 Razor 页面中出现任何问题:
模型
页
这使得路线没有问题。
如果我添加aspnet-api-versioning
nuget 包并配置它的服务:
我的 API 控制器继续使用以下修改。任何发往此控制器的请求都会正确生成路由。
但是,当我们尝试从 Razor Pages 请求中生成路由时,Razor Pages 停止工作。该RouteUrl
方法现在返回 null。我已经尝试更新提供给该RouteUrl
方法的路线数据,以便我通过硬编码版本(用于测试)并且它也不起作用。
是否需要在 api 版本控制包上进行任何配置以支持页面?我们有剃须刀页面,我们想要生成 API 路由以在页面中呈现,但它似乎不起作用。
api - Symfony 中的 API 版本控制
我一直在尝试在 Symfony 中找到版本控制的解决方案。在 Symfony 中进行 API 版本控制的最佳方法是什么。在 Laravel 中,这非常简单,请参见此处
您只需将不同文件夹(如 V1/V2...)中的所有内容分开,然后创建指向该文件夹(命名空间)的路由。但是 Symfony 的工作方式不同,它使用注解来创建路由
spring - 进行微服务 REST API 版本控制的最佳方法是什么?
我正在使用 Spring 开发这个项目并在 AWS EC2 实例中托管。由于很少有新的需求出现,我不得不更改我的 API 合同。但我不想破坏当前的客户。所以,我正在尝试使用版本控制来实现一些 REST API。这样每当我更新端点时,消费者应用程序就不会崩溃。但我对如何进行 API 版本控制感到困惑。我想到了两种方法。
在同一服务器中创建下一个版本端点,(在春天使用 RequestMaping("/v1/api1"),RequestMaping("/v2/api1") 类似这样的东西。)
其他明智的做法是在新服务器实例中完全运行 v2 API,但保持相同的 API 端点足迹并使用 AWS APIGateway 作为代理并在那里配置版本控制,然后根据请求中的版本号路由到旧服务器和新服务器。
但我相信第一种方法会导致大量代码重复和代码管理混乱。因为我们通过变化保持相同的功能。
在第二种方法中,如果我的版本增加,我必须为机器人版本保留两组实例,然后很难管理这些实例,特别是当我将拥有大约 15 个微服务实例时。而且它也不具有成本效益。因为我的公司是一家初创公司,所以我也需要考虑这个事实。
是否有关于 API 版本控制和管理多个端点版本的最佳实践?我愿意接受任何建议和指导。如果多台服务器也是解决方案,我愿意重新考虑成本限制。我需要这个问题的最佳解决方案。
java - 如何根据 HTTP 标头值在 RestController 之间切换?
我们正在考虑在 Spring Boot 应用程序中使用标头字段来指定 REST API 版本。
我们如何告诉 Spring Boot 根据标头值重定向调用?
我梦想着这样的事情:
对于这样的 HTTP 请求: