[APP接口] -- PHP开发APP接口(一)

原文链接: http://www.cnblogs.com/xp796/p/5347374.html

php以json或者xml 形式返回给app。明白这点就很好说了,就是把数据包装成json或者xml,返回给APP

定义抽象APP基类:


<?php  
/** 
 * 定义API抽象类 
*/  
abstract class Api {  
  
    const JSON = 'Json';  
    const XML = 'Xml';  
    const ARR = 'Array';  
      
    /** 
    * 定义工厂方法 
    * param string $type 返回数据类型 
    */  
    public static function factory($type = self::JSON) {  
        $type = isset($_GET['format']) ? $_GET['format'] : $type;  
        $resultClass = ucwords($type);  
        require_once('./Response/' . $type . '.php');  
        return new $resultClass();  
    }  
  
    abstract function response($code, $message, $data);  
}  

以xml形式返回给APP:

<?php  
class Xml extends Api {  
    public function response($code, $message = '', $data = array()) {  
        if(!is_numeric($code)) {  
            return '';  
        }  
  
        $result = array(  
            'code' => $code,  
            'message' => $message,  
            'data' => $data  
        );  
  
        header('Content-Type:text/xml');  
        $xml = "<?xml version='1.0' encoding='UTF-8'?>\n";  
        $xml .= "<root>";  
        $xml .= self::xmlToEncode($result);  
        $xml .= "</root>";  
        echo $xml;  
    }  
  
    public static  function xmlToEncode($result) {  
        $xml = $attr = '';  
        foreach($result as $key => $value) {  
                    //判断键值对,如果是数字键值不允许  
            if(is_numeric($key)) {  
                $attr = " id='" . $key . "'";  
                $key = "item";  
            }  
            $xml .= "<{$key}{$attr}>";  
                        //以递归形式返回,主要是因为数组在xml中显示是array,必须显示出来具体键值对  
            $xml .= is_array($value) ? self::xmlToEncode($value) : $value;  
            $xml .= "</{$key}>\n";  
        }  
        return $xml;  
    }  
}  

以json格式返回数据:

<?php  
/** 
 * 按xml方式输出通信数据 
*/  
class Json extends Api {  
    public function response($code, $message = '', $data = array()) {  
        if(!(is_numeric($code))) {  
            return '';  
        }  
  
        $result = array(  
            'code' => $code,  
            'message' => $message,  
            'data' => $data  
        );  
  
        echo json_encode($result);  
        exit;  
    }  
}  

也可以采用这种方式组装返回数据:

<?php  
  
class Response {  
    const JSON = "json";  
    /** 
    * 按综合方式输出通信数据 
    * @param integer $code 状态码 
    * @param string $message 提示信息 
    * @param array $data 数据 
    * @param string $type 数据类型 
    * return string 
    */  
    public static function show($code, $message = '', $data = array(), $type = self::JSON) {  
        if(!is_numeric($code)) {  
            return '';  
        }  
  
        $type = isset($_GET['format']) ? $_GET['format'] : self::JSON;  
  
        $result = array(  
            'code' => $code,  
            'message' => $message,  
            'data' => $data,  
        );  
  
        if($type == 'json') {  
            self::json($code, $message, $data);  
            exit;  
        } elseif($type == 'array') { //适合调试代码  
            var_dump($result);  
        } elseif($type == 'xml') {  
            self::xmlEncode($code, $message, $data);  
            exit;  
        } else {  
            // TODO  
        }  
    }  
    /** 
    * 按json方式输出通信数据 
    * @param integer $code 状态码 
    * @param string $message 提示信息 
    * @param array $data 数据 
    * return string 
    */  
    public static function json($code, $message = '', $data = array()) {  
          
        if(!is_numeric($code)) {  
            return '';  
        }  
  
        $result = array(  
            'code' => $code,  
            'message' => $message,  
            'data' => $data  
        );  
  
        echo json_encode($result);  
        exit;  
    }  
  
    /** 
    * 按xml方式输出通信数据 
    * @param integer $code 状态码 
    * @param string $message 提示信息 
    * @param array $data 数据 
    * return string 
    */  
    public static function xmlEncode($code, $message, $data = array()) {  
        if(!is_numeric($code)) {  
            return '';  
        }  
  
        $result = array(  
            'code' => $code,  
            'message' => $message,  
            'data' => $data,  
        );  
  
        header("Content-Type:text/xml");  
        $xml = "<?xml version='1.0' encoding='UTF-8'?>\n";  
        $xml .= "<root>\n";  
  
        $xml .= self::xmlToEncode($result);  
  
        $xml .= "</root>";  
        echo $xml;  
    }  
  
    public static function xmlToEncode($data) {  
  
        $xml = $attr = "";  
        foreach($data as $key => $value) {  
            if(is_numeric($key)) {  
                $attr = " id='{$key}'";  
                $key = "item";  
            }  
            $xml .= "<{$key}{$attr}>";  
            $xml .= is_array($value) ? self::xmlToEncode($value) : $value;  
            $xml .= "</{$key}>\n";  
        }  
        return $xml;  
    }  
  
}  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值