RESTful API中的向后兼容性

时间:2012-11-04 22:12:28

标签: c# .net rest asp.net-web-api

我目前正在设计使用ASP.NET Web API实现的RESTful API 一个非常重要的一点是向后兼容性 我想保持实际的API代码不受任何关于向后兼容性的想法,以确保清晰和最新的设计 我想通过拥有一层版本翻译来解决这个问题 这些翻译中的每一个都知道如何将一个特定版本(vPrevious)的请求和响应转换为另一个特定版本(vCurrent)的请求和响应。
这些翻译器可以轻松堆叠,以确保向后兼容任意数量的旧版本 这些翻译中的每一个都负责执行各种操作,例如为新属性设置默认值,甚至执行不同操作的数组。

我考虑过实施一个DelegatingHandler来检查客户想要使用的API的版本号,并根据它知道要使用哪些翻译。
但是,我没有看到我将如何实现这一目标。 在我看来,每个翻译器实际上都需要是一个完整的ASP.NET Web API,以及路由表和控制器。这实际上是可以接受的,但是翻译控制器如何将数据路由到链中的下一个?

1 个答案:

答案 0 :(得分:3)

我认为最干净的方法是保留您需要支持,运行的每个版本。这意味着每个版本在您的VCS中都有自己的分支,并专注于为使用该特定版本的客户提供服务。代码很干净,专注于一个版本。如果您需要处理常见的组件/数据库等,我认为您应该在架构中进一步实现该层,而不是在REST API层中。此版本控制层应该是REST API后面的第一层。

如果它确实不起作用,我可能会设计它,以便最新的API是唯一可以对付真实后端的API。其他版本只是通过常规HTTP请求调用其他版本...旧版本是较新API的REST客户端。这不是超级快,但设计非常干净,很容易理解版本代码的位置。如果您有许多客户端可以解决旧的API问题,这可能会导致解决方案太慢,您需要找到更有效的方法,但是,我们几乎回到了第一个解决方案。