php开发app接口
app接口简介:与PHP面向对象的接口不同,是通信接口地址
条件:
接口地址
接口文件
接口数据
如何通信
类似BS模式
客户端app通信格式区别:xml和json
可读性方面:xml
生成数据方面:json
xml:
拼接
DomDocument类
XMLWriter类
SimpleXML类
json:json_encode
传输速度:json
app接口能做哪些事
获取数据:从数据库|缓存中获取数据,通过接口数据返回给客户端
提交数据:通过接口提交数据给服务器,服务器入库处理,或者其他处理
封装通信接口方法
服务器端->数据库|缓存->调用接口->客户端
通信数据标准格式
code
message
data
json方式封装接口数据:
jeson_encode($data);$data为utf-8编码的
示例
//json生成数据封装
public static function json($code,$message='',$data=array()){
if(!is_numeric($code)){
return '';
}
$result=array(
'code'=>$code,
'message'=>$message,
'data'=>$data,
)
return json_encode($result);
}
xml方式封装接口数据:
示例
// xml
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>";
}
public static function xmlToEncode($data){
$xml=''
foreach ($data as $k => $v) {
if(is_numeric($k)){
$attr='id="'.$k.'"';
$k='item';
}
$xml.=is_array($v)?self::xmlToEncode($v):"<".$k.">".$v."</".$k.">"
}
/*<0></0>*/
return $xml;
}
综合方式封装通信数据方法:
示例
//综合
public static public function show($code,$message='',$data=array())
{
$type=$_GET['format']?$_GET['format']:'json'
if(!is_numeric($code)){
return '';
}
$result=array(
'code'=>$code,
'message'=>$message,
'data'=>$data,
)
if($type=='json'){
self::json($code,$message,$data)
exit;
}elseif($type=='xml'){
self::xmlToEncode($code,$message,$data);
exit;
}elseif($type=='array'){
//用来调试
var_dump($result);
}else{
//后续补充
}
}
核心技术
缓存技术
静态缓存:PHP写入文件
生成缓存
获取缓存
删除缓存
memcache缓存
php操作memcache
connect(),set(),get(),del(),
redis缓存
set,get,setex(带过期时间),del
php操作redis:phpredis
connect(),set(),get(),del()
定时任务
定时任务命令
crontab
内容说明:
分 小时 日 月 星期 命令(执行文件)
*代表取值范围内的数字,/代表每分钟|小时....
crontab -e
编辑某用户cron服务
crontab -l
列出某用户cron服务
crontab -r
删除某用户cron服务
app接口实例
单例模式链接数据库
单例:一个类只有一个实例
三大规则
构造函数需要标记为非public.单例类不能再其他类中实例化,只能被自身实例化
拥有一个保存类的实例的静态变量成员$_instance
拥有一个访问这个实例的公共的静态方法
首页接口开发及客户端app演示
方案:
读取数据库方式:时效性比较高
读取缓存方式:减少数据库压力
定时读取缓存方式:
app版本升级以及app演示
check
app错误日志接口