如何进行REST Web服务URL版本控制?

问题描述 投票:0回答:1

我需要版本REST Web服务API。我已经查看了Stack Overflow下的几篇文章。我发现有三种方法:网址版本控制,自定义请求标头和接受标头。我正准备进行URL版本控制。

我的网址是这样的:

 http://localhost:8080/api/svcs/1.0/usrLocation?1234

现在我的问题是如何对上述网址进行版本控制。我从服务器端代码中找不到任何实际示例。我能够找到理论和网址,例如:

http://localhost:8081/api/svc/v1/ and blah blah..

我的jax-rs实现代码将是什么样,实际概念将如何在服务器端实现?

我是这个初学者。我的JAX-RS实现是Apache CXF

我的代码:

  @Get
  @Path("/usrLocation")
   @Produces (MediaType.APPLICATION_JSON)
  public Response getUsrLocation(@QueryParam ("locId") String locId){
     //  logic
   }

如何将URL http://localhost:8080/api/svcs/1.0/usrLocation?1234更改为版本控制,以便将来对它有所帮助,以及它如何在jax-rs实现方面起作用?

web-services rest cxf jax-rs
1个回答
0
投票

您可以遵循两种设计方法

  1. 假设您所做的更改很小,并且在代码的特定部分,例如您有保险单应用程序,并且您正在将应用程序升级到新版本,因为govt引入了影响调试的策略。并且您具有用于计算调试的模块,那么您可以将版本作为参数传递。

    @Path("/svc")
    public class KPApiService {
    
    private final static Logger LOG = LoggerFactory.getLogger(KPApiService.class);
    
    @Path("/{version}/myapp")
    @GET
    public Response myApp(@PathParam("version")String version, @QueryParam("kpdata")String data){
        LOG.debug("You and entered version {} and data {} ", version, data);
    }
    }
    
  2. 假设您所做的更改影响很大,并且您想引入新的模块,但是很少有用户(旧版)尚未进行更改,那么您可以创建具有不同版本的单独方法

    @Path("/svc")
    public class KPApiService {
    
    private final static Logger LOG = LoggerFactory.getLogger(KPApiService.class);
    
    @Path("/1.0/myapp1")
    @GET
    public Response myApp1(@QueryParam("kpdata")String data){
        LOG.debug("You and entered version v1 and data {} ", data);
    }
    
    @Path("/1.2/myapp1")
    @GET
    public Response myApp2(@QueryParam("kpdata")String data){
        LOG.debug("You and entered version v2 and data {} ", data);
    }
    
    
    }
    
© www.soinside.com 2019 - 2024. All rights reserved.