2010-03-18 42 views
4

我正在完成我们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) 

的有关如何做到这一点的任何想法?你推荐我们做什么?

谢谢!

回答

1

我认为有两条路线的方法,一条使用v1,另一条使用v2是更好的解决方案。这听起来像是重做工作,但是如果你开始思考,那么对于versons而言,第一个与第二个不兼容是不合适的。所以,混合2逻辑将是一个矫枉过正的问题。如果你认为将来有一天你可以拥有3个版本,你觉得你的逻辑看起来如何?

更好的解决方案是让两个分开的,所以如果u需要停止执行的版本1的支持会容易为删除文件版本1 =)

+0

这就是2年前我最终做的事情。时间过得真快! – fesja

1

如何使用旧的路由规则并将.xml1/.xml2/.json1/.json2附加到最后?这样你可以重用当前的模块,只需要创建一个新的视图(“indexSuccess.xml1.php”)。

或者创建一个新的路由类?

+0

这是一个非常不错的主意,但只有在两种情况下控制器操作都执行相同的操作才有效。如果它们略有不同,我需要if/else来检查版本以搜索另一个参数,或者返回一个不同的数组等。 – fesja

0

您应该创建一个自定义路由集合,如here所示。

这将允许您匹配您拥有的任何路由需求。您可以将版本逻辑移至路由类和路由集合类。