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