1
22
我更喜欢Salesforce.com版本控制方法。Web服务的每个版本都有一个不同的URL,其格式如下:
因此,Web服务的URL如下所示:
等等…… 通过这种方法,您可以获得以下好处:
|
2
4
解决方案是避免对类型进行不兼容的更改。 例如,SystemBobject。您描述了这种类型的“版本1”和“版本2”,但它们根本不是同一类型。对此类型的兼容更改只涉及 添加 属性,而不更改任何现有属性的类型。假设的“版本更新”违反了这两个约束。 通过遵循这一条Guildeline,您可以避免您描述的所有问题。 因此,如果这是版本1中的类型定义
那么,这不能是v2中的类型定义:
…因为它消除了现有的字段。如果这是您需要做的更改,那么它不是新的“版本”,而是一个新的类型,应该以代码和序列化格式这样命名。 另一个例子:如果这是您现有的v1类型:
…则这不是该类型的有效“v2”:
…因为您更改了现有属性的类型。 这些限制被更详细地解释,主要是以技术中立的方式 Microsoft's Service Versioning article . 除了避免不兼容的来源之外,您还可以并且应该在类型中包含一个版本号。这可以是一个简单的序列号。如果您习惯记录或审核消息,并且带宽和存储空间不是问题,那么您可能需要使用UUID来增加简单整数,以标识类型的每个唯一版本的实例。 此外,通过使用LAX处理,您可以设计数据传输对象的前向兼容性,并将“额外”数据映射到“额外”字段中。如果XML是序列化格式,那么当v1服务收到v2请求时,可以使用xsd:xml any或xsd:any和processcontents=“lax”捕获任何无法识别的架构元素。( more )如果您的序列化格式是JSON,具有更开放的内容模型,那么这是免费的。 |
3
3
我知道这场比赛已经晚了,但我已经深入地研究了这个问题。我真的认为 最好的 答案涉及到另一个难题:服务中介。微软的托管服务引擎就是一个例子——我相信其他引擎也存在。基本上,通过更改Web服务的XML名称空间(如链接的文章所述,要包括版本号或日期),您允许中介将各种客户端调用路由到适当的服务器实现。MSE的另一个(而且,imho,非常酷)特性是能够执行基于策略的转换。您可以定义将v1请求转换为v2请求的XSLT转换,以及将v2响应转换为v1响应的XSLT转换,从而允许您在不破坏客户端实现的情况下退出v1服务实现。 |
4
3
我认为还需要记住的是您的客户群、您是公开发布此服务,还是仅限于一组已知代理? 我参与了后一种情况,我们发现通过简单的沟通/监视来解决这一问题并不难。 虽然它只是与您的问题间接相关,但我们发现基于兼容性的版本控制编号似乎工作得很好。以A.B.C.为例…
|
Gigi Bayte 2 · Git认为领先分支机构落后 6 年前 |
acanessa · 联接两个表并应用分组依据,但更改排序顺序 6 年前 |
diegoalmesp · 在ReactJs中对组件进行版本控制 6 年前 |
Kamil W · Artifactory-NuGet-最大唯一快照数 6 年前 |