希望jfinal能支持restful风格路由

目前jfinal支持的路由有下面几种

/**
 * Support four types of url
 * 1: http://abc.com/controllerKey                 ---> 00
 * 2: http://abc.com/controllerKey/para            ---> 01
 * 3: http://abc.com/controllerKey/method          ---> 10
 * 4: http://abc.com/controllerKey/method/para     ---> 11
 * The controllerKey can also contains "/"
 * Example: http://abc.com/uvw/xyz/method/para
 */

希望能支持 /{id}/list 这样的路由!!

评论区

JFinal

2016-06-07 21:17

1: /list/{id} 与 /{id}/list 这两种风格的路由在功能上是完全一样的,但前者 jfinal 的设计显然更符合直觉。
2:jfinal 路由设计的思脉是:路由本质上是为了去请求某个类中的某个方法,url 是为了去对应 object.method(p1, ..., pn) 这样的某个对象的某个方法。
3:进一步来 /controllerKey/methodName/urlPara 对应到 object.method(p1, ..., pn),几乎所有的编程语言参数都是在方法名的后面,所以 jfinal 路由设计中的 urlPara 也放在了 methodName 的后面,为的就是更符合直觉
4:最后,jfinal 的路由设计,在解析的时候,通常只需做一次的 map.get(target) 的操作就可以得到对应的 action,如果得不到,最差的情况下也只是多一个对最后的 "/" 位置做一次 string的 substring操作,再 map.get(...) 一次,可以说是极致的性能。比那些 for 循环中做正则匹配起码快了一个数量级

JFinal

2016-06-07 21:18

综上,其实 /{id}/list 这种路由风格真的没有什么必要

朋也

2016-06-08 11:51

@JFinal 我是在写用户模块的时候发现的,比如用户的回复列表,用/{user}/replies 话题列表 /{user}/topics 这样更附和 “语序” 意思就是 {user}的回复/话题列表

JFinal

2016-06-08 17:10

@朋也 /replies/{user} 可以理解为获取话题列表,参数为 user。即便 /{user}/replies 更符合你所理解的“语序“,但这个路由所带来的好处还不足以去添加这个特性,如果添加这个特性,原有的路由规则还是要保留,这样相当于两种路由可以实现一样的功能,学习成本会上升,当然,一切都是权衡后的结果,没有绝对的好与不好,感谢反馈 ^_^