请稍等...页面即将加载完成

手机竞拍接口原型框架

时间: 2011-03-03 / 分类: 我爱PHP / 浏览次数: 533 views / 1个评论 发表评论

      历时一周的手机竞拍接口正式完成了,刚开始规划的时候感觉不可能,但事实上就是这么快,主要是很多接口都是复制以前的接口就能搞定。一个项目完了总结一下是很有必要的。
      首先这次开发的整个结构沿溪了竞拍web站的风格,遵循统一入口,全面向对象开发。与web站不同的是采用了统一输出,废除了php反射,添加了插件模块,增加调试信息。整个网站结构很清晰。

      index.php?cid=10201&format=xml&charset=gbk; 这个是接口的入口,页面只有两句代码:

1
2
3
include(_BASE_ROOT_.'/config.php');
$index = getInstance();
$index->run();

      在config.php页面中主要是做参数配置和得到一个相应处理类实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
define('VERSION', 'v0.1'); //接口版本
define('DEBUG', 1); //是否开启调试
 
$GLOBALS['comonArgs'] = array('cid', 'tid'); //通用接受参数
 
 //通用插件,即所有接口都会调用
$GLOBALS['comonPlugin'] = array('before' => array('refuseSomeUser'), 'after' => array());
 
//命令调用配置,不同的命令对应不同的处理方法
//可以配置是否验证签名,验证登陆,开启插件等
$GLOBALS['classConfig'] = array(
    '10011' => array('class' => 'User',   'method' => 'login',   'checkSign' => 1,  
             'isLogin' => 0, 'args' => array('username', userpwd), 'before' => array());
 
//传入参数格式检查配置
$GLOBALS['paraConfig'] = array( 'username' => ''); 
//错误码配置
$GLOBALS['errorConfig'] = array( -200 => '登陆失败');

      最后还有一个最关键的函数,返回相应类的实例。

1
2
3
4
5
6
7
8
9
10
11
12
function getInstance(){
    $classConfig = $GLOBALS['classConfig'];
    $cid = request('cid');
 
    $classFile = _BASE_ROOT_.'/Interface/'.$classConfig[$cid]['class'].'.php';
 
    include($classFile);
    $className = 'I_'.$classConfig[$cid]['class'];
    if(class_exists($className)){
        return new $className($classConfig[$cid]);
    }
}

      前端请求页面就这些,来看看类文件吧,当然还有个主干页面Icom.php页面还没上呢,这个是页面通用继承类,是所有类的爸爸,既然是长辈肯定要为子女做很多事情了,比如帮他们登陆,帮他们过滤坏人(注入),帮他们规划(统一输出)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class Icom{
 
    function __construct($data){
        $this->_conf = $data; //传入配置数据
 
        $this->_filterArgs(); //过滤get、post、request变量
 
        $this->_initSystem(); //初始化系统配置
 
        $this->_checkLogin(); //根据配置是否要求登陆并完成登陆操作
 
        $this->_checkAuth(); //检查权限,如是否黑名单等。
    }
 
    function run(){
        $plugin = new I_Plugin($this->_conf, $this->_REQUEST);
        $plugin->runBefore(); //调用前置插件
 
        $action = $this->_conf['method'];
        $res = $this->$action();
        I_Format::result($res, $this->format, $this->charset, $this->_request('debug'), $this->_debugStr());
 
        $plugin->runAfter(); //调用结束插件
    }
}

      还有I_Plugin和I_Format类就不多说了,I_Plugin负责找出配置中的所有配置插件,并执行。I_Format类就做统一格式化,一般分json和xml,xml又提供了两种,一种是调用DOMDocument类创建,一种是字符串拼接,当然我们选择了后者,因为性能。

      最想说的是这个插件问题,因为在开发时,发现以前的web竞拍中有大量的判断代码,如内侧资格判断,活动资格判断等等。活动或内侧过期了,那么这里就有一段长长的注释代码,看着人很揪心。所以在开发时加入插件模块,所有的非功能性代码全以插件函数形式加载执行。

      在这次的run函数中没有使用ReflectionClass($this)来反射需要执行的方法,这也是出于性能的因素考虑。不仅代码简单,更重要是更容易理解。

      框架写多了能总结很多,以前写mvc框架的时候接触php反射,所以在web竞拍中就使用上了,当时的模块类中必须有配置代码,现在完全剔除了,给开发者减轻了很多工作量,他们只需要关心功能代码。这次总共14个接口,我自己写了注册、登入、登出、购买拍点、购买拍品、出价6个接口;刘雪飞写了用户相关4个接口;小郭写了竞拍相关4个接口。特别说一下小郭和liuxf之前都没有参加过竞拍开发。特别谢谢,你们的努力大大缩短了开发时间。

      之前做的订制邮件今天下午已经把所有彩种都上了。一下子感觉轻松了很多,本身花不了很多时间,qianqian催的人心咕咕的,现在上完就好了。电信短信网关也上线了,但是response的有点慢,接下来是联通短信网关开发。

更多
订阅

1个评论

  1. 外贸人才网
    2011/03/07 于 06:04:22

    技术呀,学习中

发表评论

您的昵称 *

您的邮箱 *

您的网站


3 + seven =