Sof*_*fia 2 scala playframework
因此,目前我的路线文件是一系列带有硬编码版本的路线。
GET /v1/companies/$id<[-a-zA-Z0-9]+>/etwasX controllers.Company.etwasX(id:String, q: Option[String])
GET /v1/companies/$id<[-a-zA-Z0-9]+>/etwasY controllers.Company.etwasY(id:String, q: Option[String])
Run Code Online (Sandbox Code Playgroud)
我定义了大约30条路线。现在,我想支持其他版本。我以为我可以这样做:
GET /v<[0-9]+>/companies/$id<[-a-zA-Z0-9]+>/etwasX controllers.Company.etwasX(id:String, q: Option[String])
Run Code Online (Sandbox Code Playgroud)
但是它不起作用,如果我用$定义它
GET /v$version<[0-9]+>/companies/$id<[-a-zA-Z0-9]+>/etwasX controllers.Company.etwasX(id:String, q: Option[String])
Run Code Online (Sandbox Code Playgroud)
然后它抱怨我在controller方法中没有版本参数。除了在每个控制器方法中指定版本之外,还有其他方法吗?
如果不是,是否有一种方法可以某种方式自动为所有受支持的版本生成路由(假设现在它们具有相同的定义)?
关于是否应该使用URL来对HTTP(REST)API进行版本控制的讨论很多,就像在使用路径前缀一样。但是,如果您确定URL版本控制是解决问题的正确答案,则可以通过将路由拆分为多个文件来更轻松地实现这一目标。
这样,您将拥有以下conf/routes文件:
# SomeController.index is an endpoint which is not versioned
GET / controllers.SomeController.index
-> /v1 api.Routes
Run Code Online (Sandbox Code Playgroud)
而且,您将拥有一个conf/api.routes包含以下内容的文件:
GET /companies/$id<[-a-zA-Z0-9]+>/etwasX controllers.Company.etwasX(id:String, q: Option[String])
GET /companies/$id<[-a-zA-Z0-9]+>/etwasY controllers.Company.etwasY(id:String, q: Option[String])
Run Code Online (Sandbox Code Playgroud)
我们在这里所做的基本上是创建v1指向中定义的API路由的path()api.routes。然后,当您决定需要时v2,只需编辑子路由前缀。