一、APP的通信格式之xml
xml:扩展标记语言,可以用来标记数据,定义数据类型,是一种允许用户对自己标记语言进行定义的源语言。XML格式统一,扩平台语言,非常适合数据传输和通信,业界公认的标准。
支持操作系统:windows、linux
支持语言:python、php、java
二、APP的通信格式之json
JSON是一种轻量级的数据交换语言,以文字为基础,且易于让人阅读,同时也方便了机器进行解析和生成。
JSON简单的说是javascript中的对象和数组,所以这两种结构就是对象和数组两种结构,通过这两种结构可以表示各种复杂的结构,其可以将Javascript对象中表示的一组数据转换为字符串,然后就可以在函数之间轻松的传递这个字符串,或者在异步应用程序中将字符串从Web客户机传递给服务器端程序。
JSON采用完全独立于程序语言的文本格式。JSON是理想的数据交换语言。
三、APP的通信格式之区别
1、可读性方面:xml比较好
2、生成数据方面:json较优(一个函数即可)
3、传输速度方面:json胜出
四、APP接口的作用
1、获取数据
从数据或者缓存中获取数据,然后通过接口数据返回给客户端
2、提交数据
通过接口提交给服务器,然后服务器对数据进行入库处理,并返回执行结果。
五、APP开发之APP接口
1、json方式封装接口数据的方法
通信数据的标准格式:
code 状态码(200,400等)
message 提示信息(提示用户的操作成功与失败)
data 返回的数据
2、json方式封装:php生成JSON数据
方法:json_encode($value);
注意:该函数只能接受UTF-8编码的数据,如果传递其他格式的数据的话会返回NULL
六、使用json和xml封装数据,代码如下:
1 <?php 2 class Response{ 3 static public function datas($code,$message,$data,$type='json'){ 4 switch($type){ 5 case 'json': 6 return self::json($code,$message,$data); 7 break; 8 case 'xml': 9 return self::xml($code,$message,$data);10 break;11 case 'array':12 $arr = array(13 "code"=>$code,14 "message" =>$message,15 "data" =>$data,16 );17 var_dump($arr);18 break;19 default: 20 break;21 }22 }23 //xml为了安全性在前面加static24 static public function xml($code,$message,$data){25 if(!is_numeric($code)){26 return false;27 }28 if($message && $data){29 $str = '<?xml version="1.0" encoding="UTF-8">30 <item>31 <code>'.$code.'</code>32 <message>'.$message.'</message>33 <data>';34 $str.=self::item($data);35 $str.='</data>36 </item>';37 return $str;38 }else{39 return false;40 }41 }42 static public function item($data){43 $str = "";44 //打印var_dump($data);45 foreach($data as $key =>$value){46 if(is_array($value)){47 $str .="<data$key>".self::item($value)."</data$key>\n";48 }else{49 $str .="<$key>{$value}</$key>\n";50 } 51 }52 return $str;53 }54 //json55 static public function json($code,$message,$data){56 if(!is_numeric($code)){57 return false58 }59 if($message && $data){60 $arr = array(61 "code"=>$code,62 "message" =>$message,63 "data" =>$data,64 );65 return json_encode($arr);66 }else{67 return false;68 }69 }70 }71 $data = array(72 array("name"=>"张三","age"=>"10"),73 array("name"=>"李煜","age"=>"20"),74 array("name"=>"李涛","age"=>"18"),75 array("name"=>"马华","age"=>"20"),76 array("name"=>"王子涵","age"=>"20"),77 array("name"=>"李丽","age"=>"22"),78 );79 $type = isset($_GET['type'])?$_GET['type']:'json';80 echo Response::datas("200","成功",$data,$type)81 ?>
七、数据缓存到文件中,代码如下:
1 <?php 2 class Files{ 3 public $dir; 4 public $ext = '.txt'; 5 public $path; 6 public function __construct(){ 7 $this->dir=dirname(__FILE__).'/data/'; 8 } 9 //缓存数据10 public function CacheData($data,$paths,$time,$filename){11 //设置缓存文件12 $this->path=$this->dir.$paths.$filename.$this->ext;13 if(!file_exists(dirname($this->path))){14 mkdir(dirname($this->path));15 }16 if($data){17 // 设置数据,不足10位用0补全18 $str = sprintf('010%d',$time).$data.time();19 //数据存在的话,对数据进行缓存20 file_put_contents($this->path,$str);21 }else{ 22 //判断文件是否存在23 if(!file_exists($this->path)){24 return false;25 }26 //如果数据为空,删除缓存27 if(is_null($data)){28 //删除文件29 unlink($this->path);30 }31 //定时更新32 $datas=file_get_contents($this->path);33 $cacheTime=substr($datas,0,10);34 $oldTime =substr($datas,-10);35 if($oldTime+$cacheTime >time()){36 return substr($datas,10,-10);37 }else{38 return false;39 }40 }41 }42 }43 include "Response.php";44 header('content-type:text/html;charset=utf-8');45 $model=new Files(); 46 //删除缓存47 $model->CacheData(null,'user','','file1');48 //$model->CacheData('数据',缓存到哪个文件中,缓存时间,'文件名file1')49 //把数据缓存到data文件下的user文件夹的stem.txt中50 //读取缓存51 if($data=$model->CacheData('123','/user/',100,'file1')){52 $data=json_decode($data,true);53 var_dump($data);54 echo "从文件获取数据";55 }else{56 //设置缓存57 echo "设置数据";58 $data = array(59 array("name"=>"张三","age"=>"10"),60 array("name"=>"李煜","age"=>"20"),61 array("name"=>"李涛","age"=>"18"),62 array("name"=>"马华","age"=>"20"),63 array("name"=>"王子涵","age"=>"20"),64 array("name"=>"李丽","age"=>"22"),65 );66 var_dump($data);67 $str= Response::datas("200","成功",$data);68 $model->CacheData($str,'/user/',100,'file1');69 }70 ?>