首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用多种版本的结构的查询系统?

使用多种版本的结构的查询系统?
EN

Stack Overflow用户
提问于 2012-06-04 13:10:04
回答 2查看 42关注 0票数 0

我正在开发SOAP API in PHP。这个API应该能够处理多个接口版本。为此,我将对数据结构进行版本控制,如:

  • StructV1User
  • StructV1Group

过了一段时间...and ..。

  • StructV2User
  • StructV2Group

新的数据结构不会覆盖旧的数据结构。多个API接口版本应该同时工作。

API接口的第一个版本中,操作如下所示:

代码语言:javascript
复制
User userGet(int id)

它返回一个具有以下结构的对象:

代码语言:javascript
复制
User {
    int id;
    string username;
    int created;
    int updated;
}

假设经过一段时间后,从结构中删除了一些属性,并添加了其他属性(在本例中,操作签名没有改变):

代码语言:javascript
复制
User {
    int id;
    string username;
    int updated;
    bool admin;
}

因此,如果数据库发生了变化,并且字段created不再存在,那么它应该是null。老客户端应该检查空值。

备注:

interface

  • Database的多个版本随着时间的推移而变化,每个版本都有自己的URL、自己的WSDL和自己的proxy class

如何创建使用多个结构版本的查询系统?

,有什么已知的方法吗?

EN

回答 2

Stack Overflow用户

发布于 2012-06-04 13:10:04

我的第一种方法是传递为每一行调用的callback函数,并根据需要转换数据:

以下是切入点:

代码语言:javascript
复制
function userGet($id){
    return UserModel::getUserById($id, 'myCallback'); /* Query system */
}

回调中的...and:

代码语言:javascript
复制
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的第二个版本:

代码语言:javascript
复制
function userGet($id){
    return UserModel::getUserById($id, 'my2ndCallback'); /* Query system */
}

回调中的...and:

代码语言:javascript
复制
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;
}
票数 0
EN

Stack Overflow用户

发布于 2012-06-04 13:16:24

因为这是一个soap,所以在更新结构时,你不能给他们一个全新的URL吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10881931

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档