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