我有一个休息网络服务,假设有一个方法
int foo(Mytype x)
它有很多客户,我想向 to 添加一个参数Mytype
并更改 foo 的行为方式,因为这是一个安静的服务,所以所有客户也实现了Mytype
任何想法的版本,如何在不破坏任何客户的情况下实现这一点?
我有一个休息网络服务,假设有一个方法
int foo(Mytype x)
它有很多客户,我想向 to 添加一个参数Mytype
并更改 foo 的行为方式,因为这是一个安静的服务,所以所有客户也实现了Mytype
任何想法的版本,如何在不破坏任何客户的情况下实现这一点?
你考虑过版本控制吗?例如 server/ver2/foo
我认为您唯一的其他选择是实现新功能,这样就不需要了,例如
foo (MyType myType) {
if (myType.newField exists) {
// do new stuff
}
}
最后一点,我建议将这两种方法结合起来,这将确保 foo 向后兼容。
int
我在我的请求中添加了一个POST
,它没有破坏任何东西。所以看起来像在休息服务请求类中添加一个参数并不是真正的“重大更改”,但删除一个肯定会破坏客户端。
我认为最安全的方法是使用版本控制。
您可以为 MyType 提供一个新版本,可以使用 Accept 和 Content-Type 标头中的 MIME 类型描述来处理,例如:
application/json+foo;application,v=2
另一种可能性是通过 URI/URL 处理版本,即
https://api.yourhost.com/v2/MyType
就像 Damo 已经说过的那样,您必须处理服务器上不同资源表示的使用。