json和xml封装数据、数据缓存到文件中
一、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为了安全性在前面加static 24 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 //json 55 static public function json($code,$message,$data){ 56 if(!is_numeric($code)){ 57 return false 58 } 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 ?>