OpenRasta 서비스가 있으며 미디어 유형을 사용하여 리소스를 버전 화하고자합니다. 우리는 네임 스페이스로 구분할 수있는 새로운 버전마다 다른 DTO 세트를 갖게 될 것입니다. DTO의 각 버전마다 해당 미디어 유형이 있습니다.OpenRasta : 리소스를 적절하게 버전 지정하기 위해 제네릭 처리기를 사용할 수 있습니까?
은 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)));
지금 당장은 내 서비스가 GET 요청의 Accept 헤더와 상관없이 MyResourceHandler<Dto.V1.MyResource>
으로 요청을 처리하고있는 것처럼 보입니다.
의견이 있으십니까? accept 헤더를 사용하는 대신 /v1/MyResource/
과 같은 URI를 사용하도록 스키마를 변경할 수 있지만이 방법을 사용하는 것이 좋습니다.
편집 : 나는 우리가 버전을위한 미디어 유형을 사용하는 이유의 일부를 추가이 아니라 공개 웹에 액세스 할 수 의미 내부 사용을위한 서비스이기 때문입니다해야 .
감사합니다. 필자는 직렬화가 웹에서 악하다고 생각하는 이유에 대해 더 많이 듣고 싶습니다. –
미디어 유형에 의존하지 않고 버전 관리를 위해 URI를 사용한다면 원하는 것 (대부분의 경우 일반, 처리기 및 리소스의 여러 버전 용 코덱)을 얻을 수있는 것처럼 들립니다. 그렇다면 아마도 그 길로 갈 것입니다. –
당신은 자원의 식별을 깨뜨리기 때문에 그것은 끔찍할 것입니다. 나는 당신이 모든 동일한 결과를 얻었지만 시간이 지남에 따라 당신의 URI를 일관성있게 유지하면서 그 솔루션을 통해 나의 해결책을 강력히 추천 할 것이다. 뭔가 URI가 버전 관리를 향해 갈 수있는 내 솔루션에 누락되었습니다. – SerialSeb