首页
App
&
Coffee
文档
项目
分享
反馈
俱乐部
登录
注册
api/v1/method?parms,怎么获取v1这个值呢
lyq027
2017-08-14 18:01
主要做api接口版本控制,怎么获取v1这个参数呢
项目:
JFinal
2
2
评论区
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
明白了,感谢
回复
发送
我要反馈
热门反馈
扫码入社