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

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字符串之外,还有什么方法可以使用(或其他方式)来获得版本化操作的正确路径?还是我在某种程度上做错了版本控制?

我可能只是在这里复杂化了,但我仍然认为这应该有效,不是吗?

0 投票
1 回答
1458 浏览

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 我们可以做到这一点,但我不知道怎么做?

0 投票
0 回答
387 浏览

c# - 如何在 web api 中进行版本控制时管理代码库?

我需要公开 API 方法的新版本,因为我无法承受对现有方法的重大更改。

现有:http ://www.test.com/api/v1/customer/ {id}

新:http ://www.test.com/api/v2/customer/ {id}

我已经阅读了有关执行版本控制和应用策略的不同方法。我需要知道的是:

1) 应用版本控制时如何管理代码库?

2) 是否必须在所有版本中拥有所有 API?

我正在研究 ASP.NET Web API,在我的当前版本中有 100 多个端点,我希望避免代码重复并找到保持代码可管理性的最佳方法。

任何帮助都是不言而喻的。

0 投票
1 回答
791 浏览

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 版本控制上问过这个问题,但我想知道这是否只是我还没有弄清楚的问题,并且可以从这个论坛得到答案。

0 投票
1 回答
904 浏览

thrift - 停用已定义的 Thrift API 的最佳实践?

只是好奇下面的场景会发生什么?

  1. 在最新的 thrift 服务定义中删除了定义的 API;
  2. 服务器端的实现升级到最新定义(即不再有关于被移除API的实现);
  3. 一些客户端可能仍然停留在过时的服务定义上,并且有流量到已删除的 API。

作为一个更普遍的问题,是否有最实用的方法来淘汰现有的 API(即,一旦在 .thrift 文件中定义)?

0 投票
1 回答
12545 浏览

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 可以解决问题,但事实并非如此。现在我正在为下一步该做什么而苦苦挣扎。

有什么建议么?

0 投票
2 回答
2125 浏览

c# - 如何为 SwaggerUi 中显示的路径提供路径参数?

我在我的 WebAPI 项目上设置了 Swagger/Swashbuckle。我遵循了Microsoft 的指南,其中介绍了如何使用 Swagger 设置 Aspnet.WebApi.Versioning。我的 API 有多个版本,所以{version}在路由属性中有一个参数集,像这样:

我的问题是,这{version}在文档中显示的路径中显示了一个属性,如下所示:

在此处输入图像描述

相反,我希望这个路径属性实际上具有属性中的值ApiVersion,这样阅读文档的客户就不会感到困惑。理想情况下,假设 UrlDiscoverySelector 设置为v2上述路径应该是:

我尝试简单地替换UI{version}中工作RelativePathApiExplorer,但破坏了测试功能,因为它{version}被更改为query参数而不是path,这不是我的 API 的配置方式。

我是否可以ApiExplorer在 swagger 构建文档之前修改值,同时仍保留测试功能?

0 投票
1 回答
511 浏览

ruby-on-rails - 当您的数据库架构发生变化时处理旧版本移动应用程序的正确方法

我有一个 ionic android 移动应用程序,它连接到 rails api 服务器上的 ruby​​,这个应用程序使用 postgresql 作为数据库服务器。

每当我创建一个新功能时,我都会将 api 和新应用程序都部署到应用程序商店,并碰撞相应版本的 api 和应用程序,它们有自己的版本编号顺序。
该 api 已部署到服务器,但用户设备上的应用程序不经常更新,因此对我来说出现以下 2 种情况

案例 1:新列添加
发布时会发生问题,例如,我在 db 中的某些表中添加了很少的新列,以捕获相应文本字段也已添加到应用程序 UI 的附加信息。
在这里,新版本应用程序的用户将按预期工作(将这 2 个信息发送到列),但旧版本不会发送这 2 个字段值

案例 2:删除
的列例如,我正在以一种主要方式重新构建应用程序,并且必须规范化数据库,因为它之前效率低下,甚至导致表等被破坏或删除了几列。
在这里,旧版本的应用程序只会崩溃或无法工作。

我觉得我构建的每个业务应用程序都会有相同的场景来管理,这应该是所有人的共同问题

我正在编写一些自定义逻辑,应用程序将在连接到 api 服务器时检查“更新标志”,如果应用程序的版本设置为强制更新以使其与 api 版本一起使用,那么应用程序将被重定向玩/应用商店。

我想知道每个人是如何处理这个问题的,我做得对吗?

是否有任何 Rails 插件或库已经解决了这个特定问题或帮助解决了这个问题。我知道有很多可用的版本控制 gem,但他们不处理这个问题 [强制更新应用程序]

请指导

0 投票
1 回答
656 浏览

rest - REST:为什么带有标头的版本使用 vnd 而不是为版本控制添加新标头?

在 REST API 中,我正在检查对带有接受标头的版本 API 的推荐:

现在,服务器可以提取此信息并发送 v2 响应。为什么我们在接受标头中发送 vnd.com.myservice.v2 我们应该只发送 Accept: application/json?为什么我们不应该为此创建单独的标题?

0 投票
2 回答
581 浏览

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 个控制器......

感谢帮助。