2012-03-22 2 views
3

Каков подходящий способ отображения типов носителей в openrasta? До этого момента на одном из наших остальных API, мы определили пользовательские типы носителей с номером версии в них:Версии типов носителей в OpenRasta

application/vnd.company.Entity-v1+xml 

В настоящее время все эти СМИ типа просто передается в пользовательский кодек, который мы определили для удаления некоторых из теги по умолчанию и теги ns, которые XmlSerializer ставит в сериализацию. В верхней части этого кодека мы имеем:

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

Теперь мы до точки, где у нас есть клиенты, которые хотят пользовательские атрибуты и элементы в XML и, таким образом, создали новый объект, который обрабатывает эти атрибуты и элементы, которые происходит от Entity. Теперь у нас есть задача перемещения конкретных клиентов до нового объекта (EntityV2), однако я не уверен, как справиться с этим в контексте OpenRasta, когда дело доходит до получения этого нового типа сущности в обработчиках. Вот то, что мы думали о до сих пор:

  • Добавить другой метод POST в обработчик для обработки производного типа
  • Создать совершенно новый URL-адрес для обработки новой сущности
  • создать новый тип носителя и затем направьте запросы каким-то образом на новый обработчик. Это было бы самым большим усилием, поскольку мы пытаемся повторно использовать один и тот же обработчик с небольшим количеством логики решения, чтобы определить, что нужно делать с новыми элементами/атрибутами.

Любой совет будет рад!

ответ

0

Я openRasta noob, но я считаю, что лучшим решением может быть использование одного и того же обработчика для обеих версий запросов и просто введение нового кодека для новых версий объекта.

Я считаю, что если вы создадите новый кодек и украсите его [MediaType("application/vnd.company.Entity-v2+xml")], он должен использовать этот кодек для десериализации запроса вместо кодека v1. Согласование содержимого OR должно позаботиться об использовании надлежащего кодека, чтобы ваш обработчик не изменился.

Это зависит от того, можно ли ожидать, что ваши клиенты будут использовать HTTP-заголовок «Принять», чтобы указать, какую версию сущности они используют. Если это не так, вы можете создать новый URL-адрес и просто настроить его с помощью существующего обработчика и нового кодека.

Имеют смысл?

Смежные вопросы