我正在通过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
。
我知道我没有在调用中使用version参数 - 因为我不需要!有没有一种合理的方法可以实现我在这之后的目标,要么让Play跳过这个检查,要么在未被捕获的路径中放置一个通配符作为参数?
(我想如果不是我可以将参数添加到方法定义中,然后忽略它。但是如果可能的话我宁愿避免使用它。)
答案 0 :(得分:5)
在尝试寻找变通方法的过程中玩了一段时间,我怀疑这可能是不可能的。
最重要的一点是反向路由。 Play希望我能够在我的模板中使用@routes.com.foo.Api.someMethod
,并将其解析为将调用该方法的URL。 (事实上,我在我的API文档中这样做)。如果我的上述任何一个提案都被接受,那么与该方法相对应的实际URL是任意的。
我想我真正想要的是方法有一个规范的URL,但其他类似的模式也被视为匹配。我接受Play不提供这个作为相对简单的路由文件语法的一部分,我必须自己完成它(例如通过使用两个模式,最终使用通配符但不直接调用相同的方法)。