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

java - 用于组织我的项目的选项:JAX-RS API、ServiceLocator 和远程 EJB

我试图找出我的 API 项目架构的选项。

我想使用 JAX-RS 1.0 版创建一个 API。此 API 使用来自更大、旧且复杂的应用程序的远程 EJB (EJB 3.0)。我正在使用 Java 6。

到目前为止,我可以做到这一点并且可以工作。但我对解决方案不满意。查看我的包裹配置。在代码之后描述了我的担忧:

的例子com.organization.api.v1.rs.UserV1RS

的例子com.organization.api.v1.services.UserV1Service

的例子com.organization.api.services.UserService

我的项目的一些要求:

  • API 有版本:v1、v2 等。
  • 同一版本化服务的不同 API 版本可以共享代码:UserV1Service并且UserV2Service使用UserService.
  • 不同版本化服务的不同 API 版本可以共享代码:UserV1ServiceOrderV2Service使用AnotherService.
  • 每个版本都有自己的视图对象(UserV1VO而不是UserVO)。

上面的代码让我感到困扰的是:

  1. ServiceLocator门课对我来说不是一个好方法。这个类使用旧库中的遗留代码,我对这个类的工作方式有很多疑问。使用的方式ServiceLocator对我来说也很奇怪,而且这种策略不适合模拟 我的单元测试服务。我想创建一个新的 ServiceLocator 或使用一些依赖注入策略(或另一种更好的方法)。
  2. UserService不打算由另一个“外部”服务使用,例如OrderService. 它仅适用于UserVxService. 但在未来,也许OrderService想使用一些来自UserService...的代码
  3. 即使我忽略了最后一个问题,我也需要在我的代码ServiceLocator中做很多事情。lookups创建循环依赖(serviceOne查找serviceTwo那个查找serviceThree那个查找serviceOne)的几率非常高。
  4. 在这种方法中,VOUserV1VO可以在我的未版本化服务(com.organization.api.services)中使用,但这不会发生。一个好的架构不允许不允许的东西。我有创建一个新项目的想法,比如api-services并将其放在com.organization.api.services那里以避免这种情况。这是一个好的解决方案吗?

所以……想法?

0 投票
13 回答
43515 浏览

c# - ASP.NET CORE、Web API:没有路由与提供的值匹配

请注意:这个问题是在 2016 年提出的。这个问题的原始答案是更新 microsoft api versiong 包。目前,该问题再次出现,但出于其他原因。

原始问题:


我在asp.net core(web api)中的路由有一些问题。

我有这个控制器(简化):

如果我调用 Create,则会创建文档并创建路由对象,但我收到错误“没有路由与提供的值匹配”并获得 500 状态。

我可以直接调用 GetByGuid,没有任何问题。

我找不到任何关于 asp.net 核心的调试帮助(就像任何现有的路由调试器一样)。

我将不胜感激任何帮助!

编辑 看起来这将是微软版本控制包中的一个错误..如果我定义修复路由 /api/v1/[Controller] 它正在工作。

但这对我来说不是解决方案。

0 投票
2 回答
77 浏览

c# - 你能同时使用两个同名的类型吗?

假设我有一个强名称程序集的版本 1 Interfaces.dll,其中包含一个IPlugin接口:

已经实现了许多插件,一切运行顺利。

有一天,我们决定插件可能应该有名字,这样我们才能看到我们加载了哪些插件。因此,我们制作了包含以下内容的版本 2 Interfaces.dll

因为我不能指望所有插件实现者都立即更新他们的插件,所以我想创建一个适配器,它将插件名称“未知”添加到旧插件版本。有没有办法实现这样的适配器?我希望它看起来像这样:

但是因为它们都被称为IPlugin,所以这是行不通的。另一种方法是重命名IPluginIPlugin_v1and IPlugin_v2,或对其命名空间进行类似的重命名,但这将要求每次有新版本时重新命名接口(或命名空间)Interfaces.dll,并且需要实现者更改对接口的所有引用(或命名空间)更新到最新的程序集版本。那么,问题又来了:

IPlugin是否可以在不重命名或其命名空间的情况下实现这种适配器?

0 投票
0 回答
88 浏览

ruby-on-rails - “设置 api_version 已弃用,仅支持 v2”消息

运行“rails 控制台”后,我收到以下消息:

原谅我的无知,但究竟是什么被弃用?

0 投票
1 回答
59 浏览

rest - 在错误的 API 版本上返回什么 HTTP 状态代码?

我正在设计一个简单的版本化 RESTful API。版本将在Accept标头中指定为媒体类型的一部分。我想知道这些情况下正确的 HTTP 状态代码是什么:

  • 尚不支持的版本,例如

    /li>
  • 不再支持的版本

    /li>
0 投票
1 回答
292 浏览

rest - ASP.NET Web API 中的 API 版本控制

我有一个我编写并发布的 ASP.NET Web API。既然它在那里,我们正在考虑做一些改进,这些改进涉及对某些调用的更改,这意味着我们需要版本来保持现有客户端的工作。

到目前为止,我在我的应用程序中使用了属性路由。方法由以下方式调用:Controller/Action 通过 RoutePrefix 和 Route 属性。

当我确实需要创建我的类的 V2 时,我只想重新创建实际更改的类,并将其他路由重定向回 v1 类,因为它们没有更改。(否则我最终会得到很多样板代码或重复代码)。

我想要做的是让以下路线适用于我的 v1 版本的类:Controller/Action

对于 V2,我希望任何新类都转到 V2,而任何未更改的类我想从 V1 类返回 HttpControllerDescriptor。路由看起来像 v2/Controller/Action,但会被重定向到 Controller/Action。

我已经实现了一个 IHttpControllerSelector 并返回了适当的 HttpControllerDescriptors 但它没有调用该方法。我相信这是因为路由信息与操作不匹配。(当我放入 IHttpActionSelector 并跟踪异常时,它说“找到了与请求匹配的多个操作)。

所以,我想我想知道:这甚至可能吗?这是实现我想要做的最好的方法吗?

0 投票
0 回答
725 浏览

django - 在 Django 中进行 API 版本控制时我应该对什么进行版本控制

目前,我正在为我们的项目进行 API 版本控制。我们有 10 个应用程序和 45 个 API 端点。每个应用程序都有、modelstasksutilsconstantsserializers文件。现在,我创建了一个包含版本文件夹的应用程序,例如等,每个版本文件夹都包含、和文件。viewsurlsapisv1v2serializersviewsutilsurls

现在,我需要知道版本控制应该考虑什么?tasks我应该对,utils和进行版本控制constants吗?我应该如何进行版本控制models

请大家帮我解决这个问题。

0 投票
0 回答
257 浏览

ios - 如何在 Swift 中检查符号的可用性,而不是操作系统版本?

我有表格的代码

... 可能的?

后者更好地表达了我的意图——如果值builtInDualCamera存在,就使用它。我不在乎它是在 iOS 10.1 还是 .2 或 .3 中引入的。

0 投票
1 回答
104 浏览

ruby-on-rails - Rails API 版本控制和 forum_url

我尝试将location标头添加到我的版本化 API。

如何覆盖render location: forum要使用的助手v1_forum_url而不是forum_url

0 投票
4 回答
1255 浏览

asp.net - .NET 应用程序中的 API 版本控制

我需要对 .Net Core 框架中的 API 版本进行一些说明。

我的客户希望在路由器级别处理版本。喜欢

我使用https://www.somedomain.com/api/1/sample/version访问它

在 IIS 中,我将在默认网站下创建一个名为“api”的应用程序(此处将处理我的 URL 中的路径“api”)并在此处托管我的代码。

为了进行 API 版本控制,我可以在这里遵循的更好方法是什么。

  1. 我可以这样做吗?

    /li>
  2. 是否可以在 IIS 中的应用程序下创建应用程序。喜欢,

默认网站 -> api -> 1 -> 未提及 API 版本的代码

默认网站 -> api -> 2 -> 没有提及 API 版本的更新代码

  1. 或者我可以在 IIS 中将版本创建为应用程序并在每个应用程序版本下部署代码。喜欢,

默认网站 -> 1 -> 未提及 API 版本的代码

默认网站 - > 2 - > 更新代码,但未提及 API 版本

这最终会改变我不喜欢的 API URL。我仍然想使用相同的 URI。
我使用https://www.somedomain.com/api/1/sample/version访问它

请告知我可以在此处遵循的最佳方法。