我首先在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的版本控制时可以使用的最佳实践