OpenRastaサービスがあり、メディアタイプを使用してリソースをバージョン管理したいと考えています。新しいバージョンごとに異なるDTOのセットがあり、名前空間で区別できます。DTOのバージョンごとに、対応するメディアタイプがあります。
したがって、DTOは次のようなメディアタイプにマップされます。
Namespace.Dto.V1.MyResource -> application/vnd.Namespace.Dto.V1.MyResource+json
Namespace.Dto.V2.MyResource -> application/vnd.Namespace.Dto.V2.MyResource+json
リポジトリの実装はDTOのバージョンに固有ですが、インターフェイスは汎用です。ハンドラーとコーデックも汎用的にしたいので、DTOのバージョンごとにそれらをコピーして貼り付ける必要はありません。だから私は私のルートを次のように見せたいです:
ResourceSpace.Has.ResourcesOfType<V1.MyResource>()
.AtUri("MyResource/{resourceID}")
.HandledBy<MyResourceHandler<Dto.V1.MyResource>>()
.TranscodedBy<MyResourceCodec<Dto.V1.MyResource>>()
.ForMediaType(mediaTypeMapper.GetMediaType(typeof(Dto.V1.MyResource)));
//V2 of DTOs
ResourceSpace.Has.ResourcesOfType<V2.MyResource>()
.AtUri("MyResource/{resourceID}")
.HandledBy<MyResourceHandler<Dto.V2.MyResource>>()
.TranscodedBy<MyResourceCodec<Dto.V2.MyResource>>()
.ForMediaType(mediaTypeMapper.GetMediaType(typeof(Dto.V2.MyResource)));
これは機能する必要がありますか?現在、私のサービスはMyResourceHandler<Dto.V1.MyResource>
、たとえばGETリクエストのAcceptヘッダーに関係なく、リクエストを処理しているようです。
何かご意見は?/v1/MyResource/
acceptヘッダーを使用する代わりにURIを使用するようにスキームを変更することもできますが、これを機能させるのは素晴らしいことです。
編集: バージョン管理にメディアタイプを使用している理由の一部を追加する必要があります。これは、これが内部使用のサービスであり、パブリックWebでアクセスできるようにするためのものではないためです。