0

HTTP リクエスト ヘッダーを使用してバージョン管理された REST API が必要です。

GET /someResource

バージョン: 1.0

このリソースの 2 つのバージョンがある場合、私の JaxRS Web アプリケーションは、要求されたバージョンのいずれかに適切な応答を提供できる必要があります。そのため、次のクラスがクラスパスの一部であることが期待されます。

@Path("/someResource")
public class SomeResourceV1 {
  **snip**
}

@Path("/someResource")
public class SomeResourceV2 {
  **snip**
}

ここで、Version ヘッダーに応じて、これらのリソース クラスのいずれかにリクエストをディスパッチしたいと思います。これは、サーブレットフィルターを使用して行われると思います。しかし、私は Guice を使用しているので、探しているのは要求ごとのインジェクターだと思います。

リクエストがバージョン 1.0 の場合、SomeResourceV1 のバインディングでインジェクターを使用します。それ以外の場合、リクエストがバージョン 2.0 の場合、SomeResourceV2 のバインディングでインジェクターを使用します

GuiceFilter をサブクラス化することで、必要なものを取得する方法があると思いますが、完全にはわかりません。誰かが前にこのようなことを試したことがありますか?

4

1 に答える 1

1

まさにあなたが求めているものではありませんが、リクエストのメディア タイプにバージョンを含めることができます (例: application/vnd.foo.v1+json-vndカスタム ベンダー タイプを指定+jsonし、受信リクエスト エンティティが JSON 形式であることを JAX-RS 実装に知らせます)。@Consumes次に、各メソッドでアノテーションを使用してディスパッチできます (例: @Consumes("application/vnd.foo.v1+json")vs.@Consumes("application/vnd.foo.v2+json")カスタム フィルターを追加する必要はありません)。

于 2014-02-09T17:06:28.817 に答える