处理 JAX-RS REST API URI 版本控制的最佳方式
我首先在stackoverflow中进行了搜索,但我无法找到与我的问题相关的任何答案。我能找到的只是与REST uri设计相关的问题。
我的问题是在后端。假设我们有两个不同版本的 REST uri
http://api.abc.com/rest/v1/products
http://api.abc.com/rest/v2/products
在后端(服务器端代码)上遵循的最佳方法是什么,以便在基于版本的这两组API中正确路由,可管理性和重用现有类?
我已经想到了使用不同@Path注释来定义资源类的方法,例如,分别为v1和v2设置一个包,在该包的ProductsResource类中,定义
package com.abc.api.rest.v1.products;
@Path("/rest/v1/products")
public class ProductsResource {...}
package com.abc.api.rest.v2.products;
@Path("/rest/v2/products")
public class ProductsResource {...}
然后拥有基于版本的实现逻辑。这种方法的问题在于,当我们只从api集中更改一个特定的资源API时,我们还必须将其他类复制到v2包中。我们能避免它吗?
如何编写一个自定义注释,说@Version并具有它支持的版本的值?现在,无论是 v1 还是 v2,两个请求都将转到同一资源类。
例如,例如
package com.abc.api.rest.products;
@Path("/rest/{version: [0-9]+}/products")
@Version(1,2)
public class ProductsResource {...}
更新:
Jarrod 提出了一个 API 版本控制建议来处理标头中的版本。这也是这样做的一种方法,但是,我期待着当我们遵循基于URI的版本控制时使用最佳实践。