OpenRasta中媒体类型的版本控制

时间:2012-03-22 21:23:12

标签: api rest openrasta

在openrasta中版本媒体类型的正确方法是什么?到目前为止,在我们的其中一个api上,我们指定了其中包含版本号的自定义媒体类型:

application/vnd.company.Entity-v1+xml

目前,所有这些媒体类型都被传递给我们定义的自定义编解码器,以删除XmlSerializer在序列化时放入的一些默认标记和ns标记。在该编解码器的顶部,我们有:

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

现在我们的客户端需要xml中的自定义属性和元素,因此创建了一个新实体来处理从Entity派生的属性和元素。我们现在的任务是将特定客户端移动到新实体(EntityV2),但是当我将这个新实体类型放入处理程序时,我不确定如何在OpenRasta的上下文中处理这个问题。以下是我们迄今为止所考虑的内容:

  • 向我们的处理程序添加另一个POST方法以处理派生类型
  • 创建一个全新的网址来处理新实体
  • 创建新的媒体类型,然后以某种方式将请求路由到新的处理程序。这将是最大的努力,因为我们尝试使用少量决策逻辑重用相同的处理程序来确定需要对新元素/属性执行的操作。

非常感谢任何建议!

1 个答案:

答案 0 :(得分:0)

我是OpenRasta noob,但我认为最好的方法可能是对两个版本的请求使用相同的处理程序,并为实体的新版本引入新的编解码器。

我相信如果你创建一个新的编解码器并用[MediaType("application/vnd.company.Entity-v2+xml")]装饰它,它应该使用该编解码器来反序列化请求而不是v1编解码器。 OR内容协商应该使用正确的编解码器,因此你的处理程序不会改变。

这取决于您的客户端是否可以使用“Accept”HTTP标头来指示他们使用的实体版本。如果不是这样,您仍然可以创建一个新URL,并使用现有的处理程序和新的编解码器进行配置。

有意义吗?