2013-11-14 55 views
6

我正在通過Play公開HTTP API,並且爲了管理兼容性中斷的更改,URL包含版本號。目前,這看起來像下面這樣:Play框架路由中的非捕獲通配符

GET /api/v1/someMethod  com.foo.Api.someMethod() 

正如我介紹一個改變的方法之一的輸出,我想支持V2。對於大多數方法來說,行爲是相同的,所以我不關心使用哪個版本。我試圖修改上述行來:

GET /api/v:version/someMethod  com.foo.Api.someMethod() 

但玩編譯失敗這一點,與錯誤Missing parameter in call definition: version

知道我沒有在通話中使用版本參數 - 因爲我不需要!有沒有一種明智的方式來實現我在這裏之後的目標,或者讓Play跳過此檢查,或者將通配符放在未作爲參數捕獲的路徑中?

(我想,如果不是我可以在參數添加到方法的定義,然後將其忽略。但我寧願避免這種可能的話)。

回答

5

有這個玩耍了一會兒試圖找到解決方法,我懷疑這可能是不可能的。

最大的問題是反向路由。 Play希望我可以在我的模板中使用@routes.com.foo.Api.someMethod,並將其解析爲將調用該方法的URL。 (事實上​​,我在我的API文檔中這樣做)。如果我的上述提案中的任何一個都被接受,那麼與該方法相對應的實際URL是任意的。

我想我真正想要的是該方法有一個規範的URL,但其他類似的模式也被認爲是一個匹配。我接受Play不提供這個作爲相對簡單的路由文件語法的一部分,我必須自己完成它(例如,通過使用兩種模式,最終通配符但不直接調用相同的方法)。