通过创建抽象 class 来对其余服务进行版本控制?
versioning rest service by creating abstract class?
我有一个版本为 v1 运行 的 REST 服务在生产环境中运行良好。现在我需要制作版本 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 的最佳方法是什么?我是否应该像这样制作一个新的 class 并将 @Path
设为 @Path("/abc/hello/v2")
并复制粘贴其中的所有内容?或者我应该创建一些抽象 class 并让 ClientServiceV1
扩展那个抽象 class 然后让 ClientServiceV2
扩展那个抽象 class 吗?我该如何进行?
我对 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" 后缀,那么您可能需要根据需要复制代码或使其指向新版本。
我有一个版本为 v1 运行 的 REST 服务在生产环境中运行良好。现在我需要制作版本 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 的最佳方法是什么?我是否应该像这样制作一个新的 class 并将 @Path
设为 @Path("/abc/hello/v2")
并复制粘贴其中的所有内容?或者我应该创建一些抽象 class 并让 ClientServiceV1
扩展那个抽象 class 然后让 ClientServiceV2
扩展那个抽象 class 吗?我该如何进行?
我对 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" 后缀,那么您可能需要根据需要复制代码或使其指向新版本。