问题标签 [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.
c# - 使用 IUrlHelper 生成版本化 API 操作的 URL
在我的 ASP.NET Core 项目中,我正在使用aspnet-api-versioning,如下所示:
所以请求被发送到:GET /api/v1/users
.
添加此操作的另一个版本时,我只需添加属性MapToApiVersion("2.0")
,这样它就是GET /api/v2/users
. 没关系。
然而,在一个视图中,我用 ajax 调用这个动作,如下所示:
这将调用端点:/User/GetUsers?version=1?searchString={searchString}&allOrganizations=true
因此它将版本附加为查询参数而不是路由参数。
如果我不添加 new {version = 1}
它只是没有“版本”查询参数是一样的。
我也尝试过使用@Url.RouteUrl("Get_Users", new {version =1})
和命名操作,[HttpGet("Get_Users"), MapToApiVersion("1.0")]
但这只是将查询参数附加到当前 url。
但是,如果我将Controllers路由属性从[Route("api/v{version:apiVersion}/users")]
to更改[Route("api/users")]
并省略 version 参数,则 ajax 调用可以正常工作。
那么IUrlHelper
除了硬编码url字符串之外,还有什么方法可以使用(或其他方式)来获得版本化操作的正确路径?还是我在某种程度上做错了版本控制?
我可能只是在这里复杂化了,但我仍然认为这应该有效,不是吗?
node.js - 如何使用 nodejs + NGINX 实现 REST API 版本控制?
从过去的几天开始,我正在研究如何在 NGINX 的帮助下实现 API 版本控制。
在应用程序级别,我能够实现但这需要 2 个 Diff 控制器、2 个 diff 路由、2 个 diff 模型等。我不想那样做。
我想要两个不同的项目,比如 v1 和 v2。使用 NGINX,如果我的 URL 包含 v1,那么它指向 v1 项目,如果 URL 包含 v2,那么它将指向 v2 项目类似的东西。
我知道使用 NGINX ALIAS 或 ROOT 我们可以做到这一点,但我不知道怎么做?
asp.net-core - 如何让 MvcOptions.ReturnHttpNotAcceptable 与 ApiVersioning 一起工作
如果不支持请求的版本,我想返回 HTTP 406。所以我有:
但即使版本正确,这也总是返回 HTTP 406(例如 application/json;v=1.0 或 application\vnd.acme+json;v=1)。
如果我设置ReturnHttpNotAcceptable
为 false,我会在版本不受支持时收到 HTTP 400(错误请求),如果版本受支持,我会收到 HTTP 200。
此外,如果我将 my 设置ApiVersionReader
为 beHeaderApiVersionReader
并设置ReturnHttpNotAcceptable
为 true,则当版本不受支持时,它会返回 HTTP 400 而不是 406。
如果我完全禁用版本控制,我会正确获得 HTTP 406,并将其ReturnHttpNotAcceptable
设置为 true,并且如果请求具有appliction/xml
并且 API 不支持 XML。
我已经在 Github 上的 ASP.NET API 版本控制上问过这个问题,但我想知道这是否只是我还没有弄清楚的问题,并且可以从这个论坛得到答案。
thrift - 停用已定义的 Thrift API 的最佳实践?
只是好奇下面的场景会发生什么?
- 在最新的 thrift 服务定义中删除了定义的 API;
- 服务器端的实现升级到最新定义(即不再有关于被移除API的实现);
- 一些客户端可能仍然停留在过时的服务定义上,并且有流量到已删除的 API。
作为一个更普遍的问题,是否有最实用的方法来淘汰现有的 API(即,一旦在 .thrift 文件中定义)?
c# - “DefaultInlineConstraintResolver”类型的内联约束解析器无法解析以下内联约束:“apiVersion”
我有一个带有默认值控制器的基本 WebApi 实现设置。
在阅读了一篇关于 RESTful WebApi Versioning 的博客后,我决定将这个包集成到一个新的 WebApi 项目中。
我添加了 NuGet 包 Microsoft.AspNet.WebApi.Versioning 来帮助我的 API 版本控制。这是我关注的包配置说明的 URL:
https://github.com/Microsoft/aspnet-api-versioning/wiki/Configuring-Your-Application
我的价值观控制器非常简单。我已将装饰添加到我的 Get 方法中。这是代码:
不幸的是,只要我将以下代码行添加到控制器,整个事情就会爆炸:
这是正在返回的错误消息的一瞥:
这是我在 Startup.cs 中的代码
我认为调用 AddApiVersioning 并提供文档中概述的 constraintResolver 可以解决问题,但事实并非如此。现在我正在为下一步该做什么而苦苦挣扎。
有什么建议么?
c# - 如何为 SwaggerUi 中显示的路径提供路径参数?
我在我的 WebAPI 项目上设置了 Swagger/Swashbuckle。我遵循了Microsoft 的指南,其中介绍了如何使用 Swagger 设置 Aspnet.WebApi.Versioning。我的 API 有多个版本,所以{version}
在路由属性中有一个参数集,像这样:
我的问题是,这{version}
在文档中显示的路径中显示了一个属性,如下所示:
相反,我希望这个路径属性实际上具有属性中的值ApiVersion
,这样阅读文档的客户就不会感到困惑。理想情况下,假设 UrlDiscoverySelector 设置为v2
上述路径应该是:
我尝试简单地替换UI{version}
中工作RelativePath
的ApiExplorer
,但破坏了测试功能,因为它{version}
被更改为query
参数而不是path
,这不是我的 API 的配置方式。
我是否可以ApiExplorer
在 swagger 构建文档之前修改值,同时仍保留测试功能?
ruby-on-rails - 当您的数据库架构发生变化时处理旧版本移动应用程序的正确方法
我有一个 ionic android 移动应用程序,它连接到 rails api 服务器上的 ruby,这个应用程序使用 postgresql 作为数据库服务器。
每当我创建一个新功能时,我都会将 api 和新应用程序都部署到应用程序商店,并碰撞相应版本的 api 和应用程序,它们有自己的版本编号顺序。
该 api 已部署到服务器,但用户设备上的应用程序不经常更新,因此对我来说出现以下 2 种情况
案例 1:新列添加
发布时会发生问题,例如,我在 db 中的某些表中添加了很少的新列,以捕获相应文本字段也已添加到应用程序 UI 的附加信息。
在这里,新版本应用程序的用户将按预期工作(将这 2 个信息发送到列),但旧版本不会发送这 2 个字段值
案例 2:删除
的列例如,我正在以一种主要方式重新构建应用程序,并且必须规范化数据库,因为它之前效率低下,甚至导致表等被破坏或删除了几列。
在这里,旧版本的应用程序只会崩溃或无法工作。
我觉得我构建的每个业务应用程序都会有相同的场景来管理,这应该是所有人的共同问题
我正在编写一些自定义逻辑,应用程序将在连接到 api 服务器时检查“更新标志”,如果应用程序的版本设置为强制更新以使其与 api 版本一起使用,那么应用程序将被重定向玩/应用商店。
我想知道每个人是如何处理这个问题的,我做得对吗?
是否有任何 Rails 插件或库已经解决了这个特定问题或帮助解决了这个问题。我知道有很多可用的版本控制 gem,但他们不处理这个问题 [强制更新应用程序]
请指导
rest - REST:为什么带有标头的版本使用 vnd 而不是为版本控制添加新标头?
在 REST API 中,我正在检查对带有接受标头的版本 API 的推荐:
现在,服务器可以提取此信息并发送 v2 响应。为什么我们在接受标头中发送 vnd.com.myservice.v2 我们应该只发送 Accept: application/json?为什么我们不应该为此创建单独的标题?
asp.net - aspnet-api-versioning - 向后兼容性
我需要澄清一下。我有 .net mvc 应用程序,我使用 Microsoft/aspnet-api-versioning(用于 ASP.NET Core)。我有 2 个控制器:
和
TwoController 我在使用 OneController 发布 API 后添加。现在,如果我尝试使用“ http://localhost:59719/One?api-version=1.1 ” ,我会看到错误:
与请求 URI“ http://localhost:59719/test?api-version=1.1 ”匹配的 HTTP 资源不支持 API 版本“1.1”。
我应该为不同的控制器使用不同的版本,还是有办法为任何请求使用一个(最新)版本?
我知道我可以将 [ApiVersion("1.1")] 添加到所有控制器,但如果我有 20 个控制器......
感谢帮助。