PHP开发APP接口(八)

首页接口的开发以及客户端app的演示
方案一:读取数据库方式开发首页接口
从数据库获取信息 封装 生成接口数据
应用场景:数据是时效性比较高的系统

方案二:读取缓存方式开发首页接口
从数据库获取信息 封装写入缓存 设定缓存失效时间 返回数据
在缓存时效内请求是从缓存里面获取数据;
用途:减少数据库的压力,用途很广,搜狐视频,优酷首页

方案三:定时读取缓存方式开发首页接口
定时生成缓存 应用端请求生存好的缓存

方案一:如何获取数据,如何将获取的数据快速生成接口数据

安装start bluestacks安卓模拟器
仿慕课网

<?php
header(‘Content-Type:utf-8‘);
//http://app.com/list.php?page=1&pagesize=12
require_once(‘./reponse.php‘);
require_once(‘./ndb.php‘);
$page = isset($_GET[‘page‘])?$_GET[‘page‘]:1;
$pageSize = isset($_GET[‘pageSize‘])?$_GET[‘pageSize‘]:1;

if(!is_numeric($page) || !is_numeric($pageSize)){
    return Response::show(401,‘数据不合法‘);
}

$offset=($page-1)*$pageSize;
$sql = "select * from dbname where {$string} order by desc limit ".$offset.",".$pageSize;
try{
    $ndb=Ndb::getInstance();
$connect = $ndb->connect();
}catch( Exception $e){
    //$e->getMessage();
    return Response::show(403,‘数据库连接失败‘);
}

$result = mysql_query($sql,$connect);

while($video = mysql_fetch_assoc($result)){
    $videos[]=$video;
}

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

在连接数据库的地方抛出一个异常,在连接的地方连接失败接收异常,避免数据连接调用出错

方案二:取缓存的方式开发接口
掌握静态缓存如何是指缓存失效时间
如何设置缓存(案例中使用静态缓存)

http发送请求给服务器

服务器判断是否存在缓存

如果存在就读取缓存返回
如果不存在就去数据库获取数据,并同时生成缓存,设置缓存时间,返回数据

设置静态缓存中的缓存失效时间

<?php

class File(){
    private $_dir;
    const EXT =".txt";
    public function __construct(){
        $this->_dir=dirname(__FILE__)."/files/";
    }
/**
*按综合方式输出通信数据
*@param string $key 文件名
*@param string $value 数据
*@param integer $cacheTime 缓存失效时间
*@return string
*/
    public function cacheData($key,$value=‘‘,$cacheTime=0){
            $filename=$this->_dir.$key.self::EXT;

if($value !== ""){
                if(is_null($value)){
                    return @unlink($filename);
                }
                //将value值写入缓存
                $dir=dirname($filename);
                if(!is_dir($dir)){
                    mkdir($dir,0777);
                }
                //时间以秒为单位,不够11位用0补齐;
                $cacheTime = sprintf(‘%011d‘,$cacheTime);

return file_put_contents($filename,$cacheTime.json_encode($value));

}

if(!is_file($filename)){
                return false;
            }/*else{
                return json_decode(file_get_contents($filename),true);
            }*/

$contents=file_get_contents($filename);
            $cacheTime = (int)substr($contents,0,11);
            $value = substr($contents, 11);

//缓存失效
            if($cacheTime !=0 && ($cacheTime + filetime($filename) < time())){
                @unlink($filename);
                return false;
            }else{
                return json_decode($value, true);
            }
    }
}

?>

应用端应用
<?php
header(‘Content-Type:utf-8‘);
//http://app.com/list.php?page=1&pagesize=12
require_once(‘./reponse.php‘);
require_once(‘./ndb.php‘);
require_once(‘./file.php‘);
$page = isset($_GET[‘page‘])?$_GET[‘page‘]:1;
$pageSize = isset($_GET[‘pageSize‘])?$_GET[‘pageSize‘]:1;

if(!is_numeric($page) || !is_numeric($pageSize)){
    return Response::show(401,‘数据不合法‘);
}

$offset=($page-1)*$pageSize;
$sql = "select * from dbname where {$string} order by desc limit ".$offset.",".$pageSize;

$cache = new File();
if(!$videos=$cache->cacheData(‘index-mk-cache‘.$page."-".$pageSize)){
    try{
        $ndb=Ndb::getInstance();
    $connect = $ndb->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,$values,1200);
    }
}

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

?>

方案三:定时读取缓存开发首页接口
学习要点:
掌握如何编写定是脚本程序
理解服务器如何提前准备数据

1.http请求服务器 服务器读取缓存

2.crontab 定时生成缓存数据
vim cron.php
<?php
//让crontab定时执行的脚本程序………… */5 * * * * /usr/bin/php /usr/local/apache2/htdocs/cron.php

//获取video中的六条数据

require_once(‘./ndb.php‘);
require_once(‘./file.php‘);
$sql = "select * from dbname where {$string} order by desc";
try{
    $ndb=Ndb::getInstance();
    $connect = $ndb->connect();
}catch( Exception $e){
    //$e->getMessage();
    //return Response::show(403,‘数据库连接失败‘);
    //连接错误写入错误日志;
    file_put_contetns(‘./logs/‘.date(‘Y-m-d‘.‘txt‘,$e->getMessage()));
    return;
}

$result = mysql_query($sql,$connect);

$videos = array();
while($video = mysql_fetch_assoc($result)){
    $videos[]=$video;
}

$file = new File();

if($videos){
    //永久生效
    $file->cacheData(‘index_cron_cache‘,$videos)
}else{
    file_put_contetns(‘./logs/‘.date(‘Y-m-d‘.‘txt‘,‘没有相关数据‘));
}
return;

?>

应用端应用
<?php
header(‘Content-Type:utf-8‘);
//http://app.com/list.php?page=1&pagesize=12
require_once(‘./reponse.php‘);
require_once(‘./file.php‘);

$file = new File();
$data = $file->cacheData(‘index_cron_cache‘);
if($data){
    return Response::show(‘200‘,‘首页获取数据成功‘,$data);
}else{
    return Response::show(‘400‘,‘首页获取数据失败‘,$data);
}

$page = isset($_GET[‘page‘])?$_GET[‘page‘]:1;
$pageSize = isset($_GET[‘pageSize‘])?$_GET[‘pageSize‘]:1;

if(!is_numeric($page) || !is_numeric($pageSize)){
    return Response::show(401,‘数据不合法‘);
}
exit;

$offset=($page-1)*$pageSize;
$sql = "select * from dbname where {$string} order by desc limit ".$offset.",".$pageSize;

$cache = new File();
if(!$videos=$cache->cacheData(‘index-mk-cache‘.$page."-".$pageSize)){
    try{
        $ndb=Ndb::getInstance();
    $connect = $ndb->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,$values,1200);
    }
}

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

?>

时间: 2024-10-09 17:07:39

PHP开发APP接口(八)的相关文章

PHP开发APP接口(二)

这里将会调用前面博客的数据库连接单例.文件缓存类和开发APP接口(一) [php] view plain copy print? <?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'); i

小蚂蚁学习APP接口开发(7)—— APP接口实例——读取缓存方式开发APP接口的代码案例

从数据库中直接读取数据,虽然时效性很强,但是对数据库造成很大压力,尤其是在高访问量的情况下.这时候可以通过缓存,来有效的缓解了这一压力,虽然时效性有些不足,但是服务器的抗压能力却达到了很大的提高. 读取缓存方式的中心思想: 当请求进来时,先查看是否有缓存,如果有并且缓存还在有效时间内,不再查询数据库,直接返回缓存即可:如果没有或者已经过了有效时间,查询数据库,返回数据,同时生成一份新的缓存,供以后使用. 代码案例,还是在前几天的代码基础上进行改造完善. File静态缓存类    (原来的代码请参

PHP开发APP接口(七)

APP接口实例 单例模式连接数据库首页接口的开发以及客户端app的演示APP版本升级接口APP错误日志的接口 单例模式连接数据库学习要点:掌握单例模式设计php连接数据库 单例模式:一个类只能拥有一个实例:<?php class Db{    puclic function __construct(){ }} $db=new Db();$db1=new Db();普通的类可以产生多个实例 单例模式三大原则:1.构造函数需要标记为非Public(防止外部使用new操作符创建对象),单例类不能在其他

php开发app接口

用interface关键字定义,示例: interface video(){ public function getVideos(); public function getCount();//这都是虚拟的方法 } 接口的实现:[接口中给的所有方法都必须在示例中实现] class movie implements video{ public function getVideo(){ //do something } public function getCount(){ //do somethi

PHP 开发 APP 接口 学习笔记与总结 - APP 接口实例 [3] 首页 APP 接口开发方案 ② 读取缓存方式

以静态缓存为例. 修改 file.php line:11 去掉 path 参数(方便),加上缓存时间参数: public function cacheData($k,$v = '',$cacheTime = 0){ //文件名 $filename = $this->_dir.$k.'.'.self::EXT; ..... line:25 把缓存时间设置为 11 位的数字,如果不满 11 位,则在时间前面补 0.再把缓存时间和缓存内容进行拼接: $cacheTime = sprintf('%011

PHP 开发 APP 接口总结 - JSON 结合 XML 方式封装通信接口

要求: 1.在一个类中封装多种数据通信方法(JSON,XML),并且只通过一个入口选择需要的数据通信格式 2.客户端开发工程师可以自行选择数据传输格式(GET 方式) response.php <?php class Response{ const JSON = 'json'; //封装的综合方法,默认的数据类型为json public static function show($code,$message = '',$data,$type = self::JSON){ if(!is_numer

PHP 开发 APP 接口--错误日志接口

APP 上线以后可能遇到的问题: ① APP 强退 ② 数据加载失败 ③ APP 潜在问题 错误日志需要记录的内容 数据表 error_log 字段: id app_id:app 类别 id did:客户端设备号 version_id:版本号 version_mini:小版本号 error_log:错误信息(由 APP 返回,客户端开发工程师开发) error.php 处理 app 错误日志 <?php require_once('./common.php'); class ErrorLog e

「PHP开发APP接口实战009」日常安全防范之防SQL入和XSS攻击

防SQL注入和XSS攻击通用过滤 首先在 /app/library/ 目录下创建 Security.php 文件并添加以下代码: <?php /** * * 防SQL注入和XSS攻击通用过滤 */ class Security { public static function filter(&$params) { if (!is_array($params)) { return; } $patterns = ['/([\x00-\x08,\x0b-\x0c,\x0e-\x19])/i', '

PHP开发APP接口(一)

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(