2010-03-18 96 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所示。

這將允許您匹配您擁有的任何路由需求。您可以將版本邏輯移至路由類和路由集合類。