问题标签 [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 回答
102 浏览

c# - 代码版本控制和维护

我手头有一个项目,其中包含 Web 服务器和应用程序服务器,然后是数据层。

我经常需要为我的不同客户创建软件版本以供使用。

有时,只有 api 路由发生变化,有时一切都在端到端发生变化,有时只有应用服务器和数据层发生变化。

我遇到的问题是如何在这种情况下对我的代码进行版本控制。我可以做的一件事就是解决方案,如果我可以这么说的话,就是扩展代码并按照我的意愿进行工作,并且可以制作一个版本并相应地迎合客户,问题是代码维护,如果频率增加我在 repo 中维护代码版本的问题。

我可以对我的 API 或/和业务逻辑或/和数据和脚本进行版本控制的最佳方式是什么?

干杯!

0 投票
2 回答
150 浏览

c# - 单点登录 - API 版本控制和共享数据传输对象

我使用以下架构为我的 Web 应用程序实现了 SSO 在此处输入图像描述

这些是基本流程: 在此处输入图像描述

现在从概念上讲,这对我来说似乎没问题,但困扰我的是所有应用程序都依赖于 SSO web api 的事实。

  1. 如果 SSO Web Api 发生变化,所有应用程序都可能突然停止工作 - 版本控制 Web API 以使其向后兼容的好方法是什么?
  2. 如果 SSO API 有用户的 DTO 对象(用户名、电子邮件、角色、函数),这意味着我必须以某种方式与 App1 和 App2 共享它们。我考虑过使用 wsdl 的 SOAP,但我想坚持使用 Web API,因为它在客户端方面更加灵活,并且是 WCF 的继承者。我想到的一件事是将 SSO API 的 DTO 对象放入单独的类库项目中并在 App1 和 App2 中引用它?

编辑:对于具有基于角色/功能的授权的 Intranet 应用程序,我需要这个

0 投票
2 回答
728 浏览

python - 带有版本控制的 DRF 测试视图:版本化 url 检索

我之前为我的观点创建了一些测试。像那样

一切都很好,直到我被要求添加 API 版本控制。

DRF 原生支持版本控制http://www.django-rest-framework.org/api-guide/versioning/ 所以我只是使用它并在我的 API 中添加了基于名称空间的版本控制

现在我需要重写我的视图单元测试以支持版本控制。

这个问题是为了获得版本化的 url reverse,我必须使用

就像在文档中一样。

但是我在测试中没有request对象,因为我自己制作了一个并且制作它所需的版本化 url。

我应该怎么办?

PS 我可以在不使用 DRF 的情况下实现版本控制,使用视图装饰器和几个 utils 函数来解决这个问题,但是当我重新发明轮子时,这对我来说感觉很糟糕。另外,我也可能会忘记一些边缘情况。

0 投票
1 回答
120 浏览

ruby-on-rails - 活动模型的 API 版本控制

我正在构建一个应用程序,其中我有一个模型用户,在应用程序的第一个版本中,以后版本中的用户将没有手机号码列,它必须存在,有没有办法向模型添加版本控制,以便活动记录验证可以写入特定版本。

0 投票
0 回答
30 浏览

android - 移动应用程序和网络服务分发建议

我和我的团队正在开发一个移动应用程序。此移动应用程序的一个功能是能够向作为我们客户的多个组织注册他们的设备。我们向客户分发多个应用程序和 Web 应用程序,其中之一是 Web api 应用程序,因此移动应用程序可以检索数据。拥有这种类型的分发可能会导致问题,因为最新版本的应用程序上的用户可能会尝试访问旧版本的 api,该版本可能具有也可能不具有 DTO 上的所有相同属性。

是否有关于如何处理这种情况的已知模式或想法?

这里简单的视觉表示 在此处输入图像描述

0 投票
1 回答
500 浏览

ruby-on-rails-4 - 无法使用 Grape Gem 自动加载序列化程序

我正在构建一个 API:

  • 红宝石 2.2
  • 导轨 4.2.6
  • 葡萄宝石 0.16.2
  • active_model_serializers-gem 0.10.2
  • 葡萄-active_model_serializers-gem (1.4 from master)

我的 JSON 序列化程序运行良好,直到我尝试按照此处所述引入 API 版本控制:https ://github.com/ruby-grape/grape-active_model_serializers

未版本化的序列化器:

版本化的序列化器:

错误信息是:

LoadError(无法自动加载常量 SignupSerializer,预期 /Users/username/GitHub/AppName/app/serializers/mobile/v1/signup_serializer.rb 来定义它):app/api/mobile/logger.rb:16:in block in call' app/api/mobile/logger.rb:15:incall'

API组织:

在此处输入图像描述

基础.rb:

v1/root.rb:

api/v1/signup.rb:

有任何想法吗?

0 投票
1 回答
1721 浏览

python - Flask Rest API 版本控制 - 返回的 URL

FooBar Api 已发布

假设有一个开发人员团队正在开发一个 API,称为FooBar api具有几个端点:

现在,让我们说FooBar api爆炸并变得非常流行。来自世界各地的开发人员都在使用它FooBar api,现在成千上万的项目完全依赖它。


问题

最近FooBar api有一个新的项目经理。他说,现在希望响应返回 amessage而不是data,因为message“更具描述性”。不幸的是,对 API 的任何更改FooBar都可能破坏数以千计的此类项目。尽管所有这些项目被破坏的开发人员大多会耐心并理解变化,但FooBar团队不想破坏他们自己的依赖项目并决定最好保持 api 向后兼容。


解决方案

FooBar api需要进行版本控制。不幸的是,没有好的方法可以做到这一点。对团队来说幸运的是FooBar,他们的项目经理最了解并决定应该通过在 url 中放置版本号来完成版本控制,因为“这是他可以看到的部分”。因此,一旦第二个版本FooBar api完成,这两个版本应该如下所示:


第二个问题

FooBar团队现在有另一个问题;他们不知道应该输入什么<url to bar>。在几乎无限可能的字符排列中,他们令人印象深刻地能够将其归结为两个选择 -/v2/bar/bar


问题

/v2/bar使用vs的优缺点是/bar什么?

0 投票
2 回答
396 浏览

ruby-on-rails - Rails API 版本控制 - 如果存在则调用控制器操作?

现在我有两个 API 命名空间,Api::V1 和 Api::V2

我计划随着时间的推移慢慢实施 V2,而不是一次性完成。但是,由于它的一部分存在,我希望客户端可以将所有 HTTP 请求发送到 V2 URL,并在该特定端点尚未实现的情况下让服务器处理它。

如果 V2 控制器没有操作,有没有办法将 V2 请求路由到 V1 控制器?

简单示例:

路线:

将产生以下端点:

  1. 获取 /api/v1/项目
  2. 发布 /api/v2/项目

目标是向 /api/v2/items 发送一个 GET 请求并让它调用 Api::V1:ItemsController#index,因为 V2 控制器还没有这个方法。

0 投票
1 回答
5075 浏览

amazon-web-services - 使用 AWS API Gateway 进行 API 版本控制

我在使用 API Gateway + Lambda 实施可行的版本控制方案时遇到问题。我的要求是在 API 级别进行主要版本控制,然后在服务级别进行次要版本控制。我的环境也分布在多个帐户中,因此暂存不是 env 传播的选项。有没有人使用 AWS API Gateway 成功实施 API 管理?

0 投票
0 回答
112 浏览

django - API 后端版本控制方法

我们正在使用 django rest 框架来创建 api(正在被移动设备使用)。我们在每个请求的视图中从 request.version 获取版本。所有这些 api 都用于需求随时间发生很大变化的场景。所有视图在内部调用 utils 方法(在 utils.py 中)。

根据版本更改管理 utils 代码的最佳方法是什么?如果我们假设版本更改的数量已经在 50 左右......那么很多 if else 看起来很脏?

如果在多个 django 应用程序中使用上述 utils 方法,如何处理版本控制情况。

任何解决用例的django包?