我正在开发SOAP API in PHP。这个API应该能够处理多个接口版本。为此,我将对数据结构进行版本控制,如:
过了一段时间...and ..。
新的数据结构不会覆盖旧的数据结构。多个API接口版本应该同时工作。
在API接口的第一个版本中,操作如下所示:
User userGet(int id)它返回一个具有以下结构的对象:
User {
int id;
string username;
int created;
int updated;
}假设经过一段时间后,从结构中删除了一些属性,并添加了其他属性(在本例中,操作签名没有改变):
User {
int id;
string username;
int updated;
bool admin;
}因此,如果数据库发生了变化,并且字段created不再存在,那么它应该是null。老客户端应该检查空值。
备注:
interface
URL、自己的WSDL和自己的proxy class如何创建使用多个结构版本的查询系统?
,有什么已知的方法吗?
发布于 2012-06-04 13:10:04
我的第一种方法是传递为每一行调用的callback函数,并根据需要转换数据:
以下是切入点:
function userGet($id){
return UserModel::getUserById($id, 'myCallback'); /* Query system */
}回调中的...and:
function myCallback($dbRow){
$row = new StructV1User;
$row->id = (int) $dbRow['id'];
$row->username = (string) $dbRow['username'];
$row->created = (int) $dbRow['created'];
$row->updated = (int) $dbRow['updated'];
return $row;
}...and用于API的第二个版本:
function userGet($id){
return UserModel::getUserById($id, 'my2ndCallback'); /* Query system */
}回调中的...and:
function my2ndCallback($dbRow){
$row = new StructV2User;
$row->id = (int) $dbRow['id'];
$row->username = (string) $dbRow['username'];
$row->updated = (int) $dbRow['updated'];
$row->admin = (boolean) $dbRow['admin'];
return $row;
}发布于 2012-06-04 13:16:24
因为这是一个soap,所以在更新结构时,你不能给他们一个全新的URL吗?
https://stackoverflow.com/questions/10881931
复制相似问题