我有一个WebService,另一个应用程序使用它来检索数据。我们需要在检索到的实体上添加新信息。例如,假设您有一个实体Product
,可以公开Name
,Price
,并且您想要添加Provider
属性。
通过我已经完成的测试,如果我只更新服务器端的WebService,而不是客户端,那么一切似乎都能正常工作:客户端仍然有效,但无法访问新房产,这是我的预期。
我的问题如下:除了无法获取新属性之外,更新服务器端实体定义而不更新客户端定义是否会产生任何隐藏影响?
不更新客户端的原因是部署应用程序的不同层/部分之间的同步问题。出于这个问题的目的,请考虑我们不想创建一个新的实体,为#34;丰富的实体调用新的方法"。
答案 0 :(得分:2)
根据客户端的不同,可能会导致不同的问题。如果您发送额外数据,某些客户端将会爆炸。在这些情况下,您可能希望做以下三件事之一:
如果您有getProduct(int id)
之前将其更改为getProduct(int id, bool includeProvider = false)
这将允许您只返回他们期望的内容,因为较旧的客户端不会在请求中发送includeprovider。
添加新方法并删除旧方法。
继续支持您的网络服务,但在/v2/<webservice>
创建一个新服务,以便您可以通过记录轻松跟踪不同版本的客户端。
无论何时我想在调用中添加其他信息,我只需添加一个新的可选包含,然后在响应xml中包含新元素。每当我进行功能更改或更改会破坏合同时,我都会创建一个新版本。
注意:如果您提供客户端,我们可以更好地了解它如何处理响应中的其他元素。
答案 1 :(得分:0)
除非您没有删除客户端正在使用的属性(即您只是添加道具),否则它应该有效。唯一的缺点是不遵循连续集成原则,当你有时会强行执行它时你会感到非常不安:)