在REST webservice url版本控制中需要帮助?

时间:2014-11-05 06:53:43

标签: web-services rest cxf jax-rs

我的要求是对REST webservice api进行版本控制。我在stackoverflow下经历了几个帖子。我发现有3种方法:Url版本控制,自定义请求标头和Accept Header。我正准备进行URL版本控制。
我的网址是这样的:

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

现在我的问题如何版本上面的url ..我没有从服务器端代码找到任何实际的例子:我能够找到理论和网址像 -

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
   }

网址如何

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

需要更改为版本控制,以便将来有用,以及它如何从jax-rs实现端工作?

感谢

1 个答案:

答案 0 :(得分:0)

您可以遵循两种设计方法

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

    @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. 假设您认为更改正在影响这么多并且您想要引入新模块但是很少有用户(遗留)尚未对这些更改进行管理,那么您可以创建一个具有不同版本的单独方法

  3. @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);
    }
    
    
    }