我首先在stackoverflow中进行了搜索,但我无法找到与我的问题相关的任何答案.我能找到的只是与REST uri设计相关的问题.
我在后端的问题.假设我们有两个不同版本的REST uri
http://api.abc.com/rest/v1/products
http://api.abc.com/rest/v2/products
在后端方面(服务器端代码)遵循基于版本的这两组API的正确路由,可管理性和现有类的重用的最佳方法是什么?
我已经考虑过使用不同的@Path注释定义资源类的方法,例如,在该包的ProductsResource类中单独包含v1和v2的包,定义
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 {...}
Run Code Online (Sandbox Code Playgroud)
然后有基于版本的实现逻辑.这种方法的问题是当我们只从api集合中改变一个特定的资源api时,我们也必须将其他类复制到v2包中.我们能避免吗?
怎么写自定义注释说@Version并拥有它支持的版本的值?现在无论是v1还是v2,两个请求都将转到相同的资源类.
比如说
package com.abc.api.rest.products;
@Path("/rest/{version: [0-9]+}/products")
@Version(1,2)
public class ProductsResource {...}
Run Code Online (Sandbox Code Playgroud)
更新:
Jarrod有一个API版本控制建议来处理标题中的版本.这也是一种方法,但我期待在遵循基于URI的版本控制时使用最佳实践
问题是
"你正在爬楼梯.每次你可以做一步或两步.楼梯有n个台阶.你有多少不同的方式可以爬楼梯?"
以下是此问题的代码解决方案,但我无法理解它.任何人都可以解释我
int stairs(int n) {
if (n == 0) return 0;
int a = 1;
int b = 1;
for (int i = 1; i < n; i++) {
int c = a;
a = b;
b += c;
}
return b;
}
Run Code Online (Sandbox Code Playgroud)
谢谢,
Python有itertools库,它允许无限循环一个项目列表.
cycle('ABCD') --> A B C D A B C D ...
Run Code Online (Sandbox Code Playgroud)
如何在java中实现相同但是对于数组?例如:
int[] a = { 1, 2, 3, 4};
cycle(a) = 1, 2, 3, 4, 1, 2, 3, 4 ....
Run Code Online (Sandbox Code Playgroud)