gpt4 book ai didi

java - 通过创建抽象类对其余服务进行版本控制?

转载 作者:行者123 更新时间:2023-12-02 04:02:29 26 4
gpt4 key购买 nike

我有一个 REST 服务,版本 v1 在生产中运行良好。现在我需要制作版本 v2 url,因为响应格式已更改,因此我们不想影响当前使用 v1 url 的客户。我们将使用版本 v2 url 返回一些其他对象,而不是使用 ClientResponse 对象。

下面是我当前的设计,其中@Path注释中提供了版本。这是由离开我们团队的其他人完成的。

@Component
@Scope("request")
@Path("/abc/hello/v1")
public class ClientService {

// ... some variables

@GET
@Path("/json/line")
@Produces(MediaType.APPLICATION_JSON)
public ClientResponse getLineData(@Context UriInfo uriInfo) {


}
}

这里设计版本 v2 url 的最佳方式是什么?我应该创建一个新类并将 @Path 作为 @Path("/abc/hello/v2") 像这样并复制粘贴其中的所有内容吗?或者我应该创建一些抽象类并让 ClientServiceV1 扩展该抽象类,然后让 ClientServiceV2 扩展该抽象类?我应该如何进行?

最佳答案

我的 REST API 版本控制策略是不让 JAX-RS 运行时自动确定要加载哪些 REST 资源,而是在 java.ws.rs.Application 实现中显式声明它们。

我的 java.ws.rs.Application 实现是我进行版本控制的地方,并在基本 API URI 中声明它

@javax.ws.rs.ApplicationPath("v1")
public class MyAppV1 extends java.ws.rs.Application {
Set<Class<?>> getClasses() {
return new java.util.HashSet<>(java.util.Arrays.asList(
ClientService.class,
OtherService.class));
}
}

然后为“v2”创建另一个,我开始在那里添加我的组件。

其目的是我可以有多个版本,并且我可以弃用旧版本并最终根据需要删除它们。它还允许我重用现有的服务。

但是,如果您现有的服务带有“v1”后缀,那么您可能需要复制代码或根据您的需要使其指向新版本。

关于java - 通过创建抽象类对其余服务进行版本控制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34754650/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com