使用API Web服务的Symfony路由
问题描述:
我正在完成我们Web服务的API。现在我正在考虑如何改变路由,所以如果我们决定创建一个新版本,我们不会破坏第一个API。使用API Web服务的Symfony路由
现在:
url: /api/:action
param: { module: api, action: :action }
requirements:
sf_format: (?:xml|json)
我所想:
url: /api/v1/:module/:action
param: { module: api1, action: :action }
requirements:
sf_format: (?:xml|json)
url: /api/v2/:module/:action
param: { module: api2, action: :action }
requirements:
sf_format: (?:xml|json)
这很简单,但完美的解决方案将有以下一种途径
# Automatically redirects to one module or another
url: /api/v:version/:module/:action
param: { module: api:version, action: :action }
requirements:
sf_format: (?:xml|json)
的有关如何做到这一点的任何想法?你推荐我们做什么?
谢谢!
答
我认为有两条路线的方法,一条使用v1,另一条使用v2是更好的解决方案。这听起来像是重做工作,但是如果你开始思考,那么对于versons而言,第一个与第二个不兼容是不合适的。所以,混合2逻辑将是一个矫枉过正的问题。如果你认为将来有一天你可以拥有3个版本,你觉得你的逻辑看起来如何?
更好的解决方案是让两个分开的,所以如果u需要停止执行的版本1的支持会容易为删除文件版本1 =)
答
如何使用旧的路由规则并将.xml1/.xml2/.json1/.json2附加到最后?这样你可以重用当前的模块,只需要创建一个新的视图(“indexSuccess.xml1.php”)。
或者创建一个新的路由类?
+0
这是一个非常不错的主意,但只有在两种情况下控制器操作都执行相同的操作才有效。如果它们略有不同,我需要if/else来检查版本以搜索另一个参数,或者返回一个不同的数组等。 – fesja
这就是2年前我最终做的事情。时间过得真快! – fesja