Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# RESTful API中的向后兼容性_C#_.net_Rest_Asp.net Web Api - Fatal编程技术网

C# RESTful API中的向后兼容性

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

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

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

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


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

。。。因此,例如/api/v1/users/439049可以是用户资源的版本1表示形式的URL,而/api/v2/users/439049返回该特定用户资源的版本2表示形式。感谢您的建议,但这不是一个选项。我必须针对通用组件工作,RESTAPI是这些组件的接口,因此版本控制就是在这里进行的。在内部,不需要向后兼容。这就是为什么我认为API是处理这个问题的正确的地方。我明白你在说什么,但是我仍然会考虑在REST API后面建立一个版本。至少认真考虑一下。更新我的答案以提供替代解决方案…感谢更新。很明显,只有当前版本可以针对真正的后端工作。我也想到了让旧版本的客户端成为新版本的客户端,但我真的不知道如何处理它。每个版本的API仍然需要有自己的基本URI,不是吗?关于在RESTAPI后面有一层版本控制。我真的不知道如何经济地处理这件事。与我所做的相比,这看起来是一个巨大的努力。