• 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 ?>
  • 相关阅读:
    node.js_1
    CSS实现垂直居中的方法
    Javascript实现图片的预加载的完整实现------》转载自(空城计-Code记)
    面向对象----选项卡
    for循环执行步骤
    适配器模式 在Android中的简单理解
    单例模式
    Android的ImageLoader图片加载简单逻辑
    在魅族手机上使用ObjectAnimator竟然不兼容?原来是这样……
    Android异步消息处理机制,Handler,Message,Looper的简单理解
  • 原文地址:https://www.cnblogs.com/qijunjun/p/7190228.html
Copyright © 2020-2023  润新知