07 读取数据库方式开发首页接口

一:读取数据库方式开发首页接口原理图
  从数据库获取信息--->>>>封装------>>>生成接口数据
  备注:运用场景[数据时性比较高的系统]
二:代码实现

(1)list.php

<?php
// http://app.com/list.php?page-=1&pagesize=12
require_once('./response.php');
require_once('./file.php');

$file = new File();
$data = $file->cacheData('index_cron_cahce');
if($data) {
    return Response::show(200, '首页数据获取成功', $data);
}else{
    return Response::show(400, '首页数据获取失败', $data);
}
exit;
require_once('./db.php');
require_once('./file.php');
$page = isset($_GET['page']) ? $_GET['page'] : 1;
$pageSize = isset($_GET['pagesize']) ? $_GET['pagesize'] : 6;
if(!is_numeric($page) || !is_numeric($pageSize)) {
    return Response::show(401, '数据不合法');
}

$offset = ($page - 1) * $pageSize;

$sql = "select * from video where status = 1 order by orderby desc limit ". $offset ." , ".$pageSize;
$cache = new File();
$videos = array();
if(!$videos = $cache->cacheData('index_mk_cache' . $page .'-' . $pageSize)) {
    echo 1;exit;
    try {
        $connect = Db::getInstance()->connect();
    } catch(Exception $e) {
        // $e->getMessage();
        return Response::show(403, '数据库链接失败');
    }
    $result = mysql_query($sql, $connect); 
    
    while($video = mysql_fetch_assoc($result)) {
        $videos[] = $video;
    }

    if($videos) {
        $cache->cacheData('index_mk_cache' . $page .'-' . $pageSize, $videos, 1200);
    }
}

if($videos) {
    return Response::show(200, '首页数据获取成功', $videos);
} else {
    return Response::show(400, '首页数据获取失败', $videos);
}


-------------------------response.php-------------


<?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;
    }

}


-----------------file.php-------------------

<?php

class File {
    private $_dir;

    const EXT = '.txt';

    public function __construct() {
        $this->_dir = dirname(__FILE__) . '/files/';
    }
    public function cacheData($key, $value = '', $cacheTime = 0) {
        $filename = $this->_dir  . $key . self::EXT;

        if($value !== '') { // 将value值写入缓存
            if(is_null($value)) {
                return @unlink($filename);
            }
            $dir = dirname($filename);
            if(!is_dir($dir)) {
                mkdir($dir, 0777);
            }

            $cacheTime = sprintf('%011d', $cacheTime);
            return file_put_contents($filename,$cacheTime . json_encode($value));
        }

        if(!is_file($filename)) {
            return FALSE;
        } 
        $contents = file_get_contents($filename);
        $cacheTime = (int)substr($contents, 0 ,11);
        $value = substr($contents, 11);
        if($cacheTime !=0 && ($cacheTime + filemtime($filename) < time())) {
            unlink($filename);
            return FALSE;
        }
        return json_decode($value, true);
        
    }
}

$file = new File();

echo $file->cacheData('test1');

 

posted @ 2015-03-23 17:50  麦田守望者~  阅读(186)  评论(0编辑  收藏  举报