7

我通过 Play 公开了一个 HTTP API,为了管理破坏兼容性的更改,URL 包含版本号。目前,这看起来如下所示:

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

当我对其中一种方法的输出进行更改时,我想支持 v2。不过,对于大多数方法,行为是相同的,所以我不在乎使用哪个版本。我试图将上面的行修改为:

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

但是 Play 无法编译它,并出现错误Missing parameter in call definition: version

知道我没有在调用中使用版本参数——因为我不需要!有没有一种明智的方法来实现我在这里所追求的,或者让 Play 跳过这个检查,或者在没有作为参数捕获的路由中放置一个通配符?

(我想如果不是,我可以将参数添加到方法定义中,然后忽略它。但如果可能的话,我宁愿避免这种情况。)

4

1 回答 1

6

玩了一段时间试图找到解决方法后,我怀疑这可能是不可能的。

最大的症结是反向路由。Play 希望我能够@routes.com.foo.Api.someMethod在我的模板中使用它,并将其解析为调用该方法的 URL。(事实上​​,我在我的 API 文档中这样做了)。如果要接受我的上述任何一个建议,那么与该方法相对应的实际 URL 是任意的。

我想我真正想要的是该方法具有规范的 URL,但其他类似的模式也被视为匹配。我接受 Play 不提供此作为相对简单的路由文件语法的一部分,我必须自己完成它(例如,通过使用两种模式,最终使用通配符但不直接调用相同的方法)。

于 2013-11-14T11:17:09.293 回答