4

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

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

4

1 回答 1

3

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

如果它真的不起作用,我可能会设计它,以便最新的 API 是唯一适用于您的真实后端的 API。其他版本只是通过常规 HTTP 请求调用其他版本……旧版本是新 API 的 REST 客户端。这不是超级快,但设计非常简洁,并且很容易理解版本控制代码的去向。如果您有许多客户端使用旧的 API 版本,这可能会导致解决方案太慢,您需要找到更有效的方法来做到这一点,但是,我们几乎回到了第一个解决方案。

于 2012-11-04T23:13:20.233 回答