2017-03-29 7 views
1

現在、ルートファイルは、ハードコードされたバージョンの一連のルートです。Play Framework(2.4.x)のurlでapiのバージョンをきれいに処理する方法は?

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]) 

約30の経路が定義されています。今はさまざまなバージョンをサポートしたいと思います。

GET /v<[0-9]+>/companies/$id<[-a-zA-Z0-9]+>/etwasX controllers.Company.etwasX(id:String, q: Option[String]) 

しかし、それは動作しません、と私は

$

GET /v$version<[0-9]+>/companies/$id<[-a-zA-Z0-9]+>/etwasX controllers.Company.etwasX(id:String, q: Option[String]) 
でそれを定義する場合、それは私がバージョンパラメータを持っていない文句を言う:私は、私は単にこれを行うことができると思いましたコントローラメソッド。すべてのコントローラメソッドでバージョンを指定する以外に他の方法はありますか?

もしそうでなければ、何とか自動的にサポートされているすべてのバージョンのルートを生成する方法がありますか?

答えて

2

HTTP(REST)APIをURLを使ってバージョン管理するかどうかについて、多くの議論があります。しかし、URLのバージョン管理があなたのケースに対する正解であると判断した場合は、splitting your routes in multiple filesで簡単に達成できます。

その方法は、次のconf/routesファイルなければなりません:

# SomeController.index is an endpoint which is not versioned 
GET / controllers.SomeController.index 
->  /v1 api.Routes 

をし、また、次のと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]) 

api.routesで定義されたAPIルートへのパス(v1)。 v2が必要と判断したら、サブルートプレフィックスを編集するだけです。

+0

V2を同じconf/routesファイルに追加できませんでした。 この要点のとおり:https://gist.github.com/jonandersen/4f60c47746de388dc9636a082b5ac30f 同じアプリで複数のバージョンをサポートする方法はありますか? –

関連する問題