api/v1/method?parms,怎么获取v1这个值呢

主要做api接口版本控制,怎么获取v1这个参数呢

评论区

JFinal

2017-08-14 19:12

v1 是指路由中的哪部分? 是否是参数,如果是 actionKey 的一部分,可以在拦截器中通过 inv.getActionKey() 整体获取

lyq027

2017-08-14 21:06

@JFinal 不是参数,api指向apiController,/v1/method,然后apiController中有一个method的方法,v1主要是做版本控制区分。这样是否能获取到?或者说纯API的后端,对接口要进行版本区分,可有什么较优的做法?

lyq027

2017-08-14 21:08

@JFinal 比如现在接口改造或升级,需要做一个版本区分。好让无线端请求时,请求新的接口。这样有什么较优的做法吗?除了把版本当做参数外,在url上能否那样写?

JFinal

2017-08-14 21:25

@lyq027 用一个 UrlHandler 做个转换就可以了,大致如下:
1:v1、v2、... vn 当成是参数来处理
2:这类 url 通过 UrlHandler 全转换为指向 ApiController
3:转换方式为 "/api/v*/method?params" 转成 "/api/method/v*?paras
4:转换完成以后,通过 getPara(0) 即可获取到 "v1"、"v2"、..."vn" 这类参数值

转换代码可以通过正则,也可以通过简单的字符串处理代码:
public void handle(String target, req, resp, isHandled) {
if (target.startsWith("/api/v")) {
String prefix = target.substring(0, 4);
String post = target.substring(7);
String version = target.substring(5, 6);
target = prefix + post + "/" + version;
}
next.handle(target, req, resp, isHandled);
}

当然,为了简单性上面代码假定了你的版本号为 2 个字符,需要你自己调整,在此仅为示例

简单一句话,就是将 target 转换成指向正确 action 的 url 值就好

JFinal

2017-08-14 21:27

handler 搞定后,配置一下: me.add(new UrlHandler())

这种方式用得很广泛,几年前我就用这种方式做过网站的老 url 映射到新 url 的 302 重定向,将搜索引擎以前收录的 url 转到新的 url 之上

lyq027

2017-08-14 23:10

@JFinal 明白了,感谢