2012-03-22 9 views
3

openrastaでメディアタイプをバージョンアップする適切な方法は何ですか?現在、これらすべてのメディアタイプのちょうど私たちはのいくつかを削除するために定義されたカスタムコーデックに渡されるOpenRastaでのメディアタイプのバージョン

application/vnd.company.Entity-v1+xml 

:我々は彼らにバージョン番号をカスタムメディアタイプを指定した私たちの残りのAPIのの一つで、この時点までXmlSerializerがシリアル化に設定するデフォルトのタグとnsタグ。そのコーデックの上部には、私たちは持っている:

[MediaType("application/vnd.company.Entity-v1+xml")] 

今、私たちはXMLでカスタム属性と要素をするクライアントを持っているので、これらの属性と要素を処理する新しいエンティティを作成したポイントにしていることエンティティから派生します。特定のクライアントを新しいエンティティ(EntityV2)に移動する作業がありますが、この新しいエンティティタイプをハンドラに追加する方法については、OpenRastaのコンテキストでどのように処理するかわかりません。我々はこれまでについて考えてきたものここにあります:

  • は派生型
  • を処理するために、私たちのハンドラに別のPOSTメソッドを追加
  • 新しいエンティティを処理するために、完全に新しいURLを作成し、新しいメディアの種類を作成し、何らかの形で新しいハンドラにリクエストをルーティングします。これは、新しい要素/属性で何が行われる必要があるかを判断するために、同じハンドラを少量の決定ロジックで再利用しようとするときに最も努力します。

アドバイスをいただければ幸いです。

答えて

0

私はOpenRastaのnoobですが、最良の方法は、両方のバージョンのリクエストで同じハンドラを使用し、エンティティの新しいバージョン用に新しいコーデックを導入することです。

新しいコーデックを作成して[MediaType("application/vnd.company.Entity-v2+xml")]でデコレートすると、そのコーデックを使用してv1コーデックではなく要求を逆シリアル化する必要があります。 ORコンテンツのネゴシエーションでは適切なコーデックを使用する必要があるため、ハンドラは変更されません。

これは、クライアントが使用しているエンティティのバージョンを示すために "Accept" HTTPヘッダーを使用することが期待できるかどうかによって異なります。そうでない場合でも、新しいURLを作成して、既存のハンドラと新しいコーデックで設定することができます。

意味がありますか?