gpt4 book ai didi

.net - 更新或版本控制 Web 服务的策略?

转载 作者:行者123 更新时间:2023-12-03 11:56:53 24 4
gpt4 key购买 nike

我很想听听有关如何处理不同版本的 Web 服务的最佳实践。

澄清一下,如果您将一些 Web 方法公开为 Web 服务,那么您想添加一个特性/功能,从而更改这些方法调用的签名,您如何以不破坏所有的方式处理它您目前调用该服务的客户有多少?

您是否在不同的 URL 上部署服务?

您是否在方法名称本身中添加了一个版本(MyMethod、MyMethodv2 等 - 呃..)

您是否将版本作为方法调用的一部分与参数列表一起传递?

有谁知道 Google 或 Amazon 如何使用其广泛的 Web 服务库来处理这种情况?

编辑:到目前为止,我在 article from Oracle 中找到了一些很好的信息。 .还有this blog entry在一些 Java 细节上很有用。我仍然很好奇看到其他一些方法。

最佳答案

对 Web 服务进行版本控制的典型方法是让客户端指定所需的版本。您可以允许简单的约束,例如“>2.0”、“<1.5”或“=1.1”。自然,您希望尽量减少支持的版本数量,以保持您的理智。如果客户端未指定版本,则假定为最新版本。

提供版本的技术各不相同。有些人提倡使用 URL,有些人鼓励使用 header ,有些人可能会将其作为 api 调用的参数。不过,几乎没有人会更改方法的名称。这相当于 OSGi 链接谈到的“包”或“命名空间”版本。这将使升级变得非常困难,并且比对实际服务的任何更改更能阻碍人们升级。

它还取决于您访问 Web 服务的方式。如果您使用的是 REST,那么保持 URL 的干净并使用 header 是最有意义的(如果需要,将其作为查询参数破解是微不足道的)。如果您使用的是 SOAP/XMLRPC/whatever-RPC,那么将它放在 URL 中通常就可以了。

Edit 5/2011 FWIW, though I disagree, Apigee's blog recommends putting the version in the URL.



客户端如何指定版本通常非常简单。更复杂的是如何同时运行所有版本。大多数语言没有办法将同一个库/模块/类/函数的多个版本加载到同一个运行时环境(无论是 VM、进程还是您拥有的)。您提供的 OSGi 链接是 Java 允许这样做的解决方案。

在实践中,OSGi 在大多数情况下都是多余的。将不推荐使用的请求代理到另一个服务器或进程通常更容易。

不过,对服务进行“版本化”的最佳方式是在它们中构建可扩展性和灵 active ,以便它们保持向前和向后兼容。这并不意味着所有版本都必须相互兼容,但连续的版本应该相互兼容。

关于.net - 更新或版本控制 Web 服务的策略?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/931109/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com