我正在SOAP
中开发API
PHP
。此API
应该能够处理多个接口版本。为此,我正在对数据结构进行版本控制,如:
......过了一段时间......
新数据结构不会覆盖旧数据结构。多个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
。旧客户端应检查空值。
备注:
API
interface
URL
,自己的WSDL
和自己的proxy class
如何创建适用于多个版本结构的查询系统?
有没有任何已知方法?
答案 0 :(得分:0)
我的第一种方法是传递为每一行调用的callback
函数,并根据需要转换数据:
以下是切入点:
function userGet($id){
return UserModel::getUserById($id, 'myCallback'); /* Query system */
}
...并在回调中:
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;
}
...以及API的第二个版本:
function userGet($id){
return UserModel::getUserById($id, 'my2ndCallback'); /* Query system */
}
...并在回调中:
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;
}
答案 1 :(得分:0)
因为你的肥皂Api不能在更新结构时给它们一个全新的URL吗?