问题标签 [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.
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 版本可以共享代码:
UserV1Service
并OrderV2Service
使用AnotherService
. - 每个版本都有自己的视图对象(
UserV1VO
而不是UserVO
)。
上面的代码让我感到困扰的是:
- 这
ServiceLocator
门课对我来说不是一个好方法。这个类使用旧库中的遗留代码,我对这个类的工作方式有很多疑问。使用的方式ServiceLocator
对我来说也很奇怪,而且这种策略不适合模拟 我的单元测试服务。我想创建一个新的 ServiceLocator 或使用一些依赖注入策略(或另一种更好的方法)。 - 这
UserService
不打算由另一个“外部”服务使用,例如OrderService
. 它仅适用于UserVxService
. 但在未来,也许OrderService
想使用一些来自UserService
...的代码 - 即使我忽略了最后一个问题,我也需要在我的代码
ServiceLocator
中做很多事情。lookups
创建循环依赖(serviceOne查找serviceTwo那个查找serviceThree那个查找serviceOne)的几率非常高。 - 在这种方法中,VO
UserV1VO
可以在我的未版本化服务(com.organization.api.services
)中使用,但这不会发生。一个好的架构不允许不允许的东西。我有创建一个新项目的想法,比如api-services
并将其放在com.organization.api.services
那里以避免这种情况。这是一个好的解决方案吗?
所以……想法?
c# - ASP.NET CORE、Web API:没有路由与提供的值匹配
请注意:这个问题是在 2016 年提出的。这个问题的原始答案是更新 microsoft api versiong 包。目前,该问题再次出现,但出于其他原因。
原始问题:
我在asp.net core(web api)中的路由有一些问题。
我有这个控制器(简化):
如果我调用 Create,则会创建文档并创建路由对象,但我收到错误“没有路由与提供的值匹配”并获得 500 状态。
我可以直接调用 GetByGuid,没有任何问题。
我找不到任何关于 asp.net 核心的调试帮助(就像任何现有的路由调试器一样)。
我将不胜感激任何帮助!
编辑 看起来这将是微软版本控制包中的一个错误..如果我定义修复路由 /api/v1/[Controller] 它正在工作。
但这对我来说不是解决方案。
c# - 你能同时使用两个同名的类型吗?
假设我有一个强名称程序集的版本 1 Interfaces.dll
,其中包含一个IPlugin
接口:
已经实现了许多插件,一切运行顺利。
有一天,我们决定插件可能应该有名字,这样我们才能看到我们加载了哪些插件。因此,我们制作了包含以下内容的版本 2 Interfaces.dll
:
因为我不能指望所有插件实现者都立即更新他们的插件,所以我想创建一个适配器,它将插件名称“未知”添加到旧插件版本。有没有办法实现这样的适配器?我希望它看起来像这样:
但是因为它们都被称为IPlugin
,所以这是行不通的。另一种方法是重命名IPlugin
为IPlugin_v1
and IPlugin_v2
,或对其命名空间进行类似的重命名,但这将要求每次有新版本时重新命名接口(或命名空间)Interfaces.dll
,并且需要实现者更改对接口的所有引用(或命名空间)更新到最新的程序集版本。那么,问题又来了:
IPlugin
是否可以在不重命名或其命名空间的情况下实现这种适配器?
ruby-on-rails - “设置 api_version 已弃用,仅支持 v2”消息
运行“rails 控制台”后,我收到以下消息:
原谅我的无知,但究竟是什么被弃用?
rest - 在错误的 API 版本上返回什么 HTTP 状态代码?
我正在设计一个简单的版本化 RESTful API。版本将在Accept
标头中指定为媒体类型的一部分。我想知道这些情况下正确的 HTTP 状态代码是什么:
尚不支持的版本,例如
/li>不再支持的版本
/li>
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 并跟踪异常时,它说“找到了与请求匹配的多个操作)。
所以,我想我想知道:这甚至可能吗?这是实现我想要做的最好的方法吗?
django - 在 Django 中进行 API 版本控制时我应该对什么进行版本控制
目前,我正在为我们的项目进行 API 版本控制。我们有 10 个应用程序和 45 个 API 端点。每个应用程序都有、models
、tasks
、utils
、constants
和serializers
文件。现在,我创建了一个包含版本文件夹的应用程序,例如等,每个版本文件夹都包含、和文件。views
urls
apis
v1
v2
serializers
views
utils
urls
现在,我需要知道版本控制应该考虑什么?tasks
我应该对,utils
和进行版本控制constants
吗?我应该如何进行版本控制models
?
请大家帮我解决这个问题。
ios - 如何在 Swift 中检查符号的可用性,而不是操作系统版本?
我有表格的代码
是
... 可能的?
后者更好地表达了我的意图——如果值builtInDualCamera
存在,就使用它。我不在乎它是在 iOS 10.1 还是 .2 或 .3 中引入的。
ruby-on-rails - Rails API 版本控制和 forum_url
我尝试将location
标头添加到我的版本化 API。
如何覆盖render location: forum
要使用的助手v1_forum_url
而不是forum_url
?
asp.net - .NET 应用程序中的 API 版本控制
我需要对 .Net Core 框架中的 API 版本进行一些说明。
我的客户希望在路由器级别处理版本。喜欢
我使用https://www.somedomain.com/api/1/sample/version访问它
在 IIS 中,我将在默认网站下创建一个名为“api”的应用程序(此处将处理我的 URL 中的路径“api”)并在此处托管我的代码。
为了进行 API 版本控制,我可以在这里遵循的更好方法是什么。
我可以这样做吗?
/li>是否可以在 IIS 中的应用程序下创建应用程序。喜欢,
默认网站 -> api -> 1 -> 未提及 API 版本的代码
默认网站 -> api -> 2 -> 没有提及 API 版本的更新代码
- 或者我可以在 IIS 中将版本创建为应用程序并在每个应用程序版本下部署代码。喜欢,
默认网站 -> 1 -> 未提及 API 版本的代码
默认网站 - > 2 - > 更新代码,但未提及 API 版本
这最终会改变我不喜欢的 API URL。我仍然想使用相同的 URI。
我使用https://www.somedomain.com/api/1/sample/version访问它
请告知我可以在此处遵循的最佳方法。