如何写UCHOME移动接口

基础

  • 接口采用RESTful的形式封装,但切记RESTful只是一种风格。
  • 你可能需要了解,如何通过PHP返回JSON数据。请参考这里1这里2
  • 本文档描述针对UCHOME的移动接口开发,所以,你还需要了解UCHOME的二次开发。请参考这里

原理

把原有要在页面显示的内容根据移动端需要修改成返回相应的JSON。UCHOME是一个严格遵循MVC的框架。所以在编写移动 端API时,我们仅需要把View部分根据移动端需要转为返回JSON。

通过分析在UCHOME主要产生View的部分有:

  • 通过showmessage语句产生

  • 通过include template语句产生

为了简化操作,封装两个函数(见function_capi.php,它相当于function_common.php):

  • capi_mkjson是基础函数,用于产生json输出,一般不直接调用

  • capi_showmessage_by_data用于产生规范的json输入。相关输入参数说明:

    1. msgkey, 代表UCHOME的消息编码,例如DO_SUCCESS,定义在language文件夹

    2. code, 代表操作是否正确返回结果,code=1代表出错, data代表要返回的数据,可以是变量 或是数组。具体例子可以参见capi/source文件夹中任何一个文件

源代码如下:

function capi_mkjson($response='', $callback=''){

    global $_SGLOBAL;
    $response = empty($response)?$_SGLOBAL['mresponse']:$response;
    if ($callback){
        header('Cache-Control: no-cache, must-revalidate');
        header('Content-Type: text/javascript;charset=utf-8');
        echo $callback.'('.json_encode($response).');';
    }else{
        // application/x-json will make error in iphone, so I use the text/json
        // instead of the orign mine type
        header('Cache-Control: no-cache, must-revalidate');
        header('Content-Type: text/json;');

        echo json_encode($response);

    }
    exit();
}

 

function capi_showmessage_by_data($msgkey, $code=1, $data=array()){
    obclean();

    //去掉广告
    $_SGLOBAL['ad'] = array();

    //语言
    include_once(S_ROOT.'./language/lang_showmessage.php');
    if(isset($_SGLOBAL['msglang'][$msgkey])) {
        $message = lang_replace($_SGLOBAL['msglang'][$msgkey], $values);
    } else {
        $message = $msgkey;
    }
    $r = array();
    $r['code'] = $code;
    $r['data'] = $data;
    $r['msg'] = $message;
    $r['action'] = $msgkey;
    capi_mkjson($r, $_REQUEST['callback'] );
}

 

编写接口

  • 根据需要,找到相关UCHOME文件
  • 根据UCHOME文件夹结构,复制文件至capi文件夹,例如 源文件 source/space_blog.php, 复制至capi/source/space_blog.php
  • 查找替换,把 $_GET 和 $_POST 替换成 $_REQUEST
  • 查找替换,把showmessage 替换成 capi_showmessage_by_data
  • 查找替换, 把submitcheck 替换成 capi_submitcheck
  • 查找替换,把 mkfeed 替换成 capi_mkfeed
  • 查找替换,把 avatar 替换成 capi_avatar
  • 若移动端需要返回实名,请调用capi_realname($uid)
  • 查找替换,把include template 语句 替换成capi_showmessage_by_data('DO_SUCCESS', 0, result);。 其中 result代表要返回给移动端的结果集
  • 测试, 编写接口文档。 推荐使用POSTMAN进行测试

编码风格

  • 修改的函数,在原uchome函数前加capi
  • 一般不允许直接修改原uchome函数,通过复制增加函数(放置function_capi.php)
posted @ 2012-11-01 14:11  编程思想家  阅读(309)  评论(0编辑  收藏  举报