在不使用任何第三方插件(如UrlRewrite)的情况下实现URL版本控制

时间:2015-05-22 06:56:05

标签: java rest jersey versioning

我有一个要求,我必须实现URL版本控制。因此,我的REST URL既可以使用url中的版本,也可以使用url中的版本。如果URL中未提及任何版本,则API将重定向到最新版本。

例如

http://localhost:9090/v1/myservice/listAll应该调用我的API的第1版,如果我使用网址http://localhost:9090/myservice/listAll,那么它应该指向最新版本的API。让我们说如果我不在网址中提及V1那么它也应该指向http://localhost:9090/v1/myservice/listAll。所以它是一种Version和VersionLess URL。

我使用Jersey来实现我的REST API并且已经使用UrlRewrite进行版本控制但是根据要求我不能使用任何第三方API。

那么泽西实施此类功能的方式是什么?

我可以使用@Path注释执行此操作并为同一资源定义多个URL吗?

注意:我知道URL版本控制不是一种好的实现方式 版本化而不是我应该使用自定义标头进行版本控制。 但在这里,我有严格要求客户实施版本控制 仅在URL中使用!

2 个答案:

答案 0 :(得分:0)

尝试

@Path("/myService")
public class MyLatestService {

    @GET
    @Path("listAll")
    public Response getMyService(...) { /* call the latest version */ }

}

@Path("/v1/myService")
public class MyV1Service {

    @GET
    @Path("listAll")
    public Response getMyService(...) { ... }

}

@Path("/v2/myService")
public class MyV2Service {

    @GET
    @Path("listAll")
    public Response getMyService(...) { ... }

}

依旧......

答案 1 :(得分:0)

您可以使用以下可选路径参数:

/* Handle v1 explicitly and implicitly */
@Path("/{version: v1/}?myService")
public class MyServiceV1 {
  @GET
  @Path("listAll")
  public Response listAll(){}
}

/* Handle v2 explicitly */
@Path("/v2/myService")
public class MyServiceV1 {
  @GET
  @Path("listAll")
  public Response listAll(){}
}