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 ?>
七、數據緩存到文件中,代碼如下:
<?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 ?>
(本文轉載自博客園)
50天安卓課,自己解決住宿問題即可免費學習!
http://www.ujiuye.com/xydt/2017/13748.html?wt.bd=qzb36000j
想就業就就業,優就業就業扶持計劃,拿到滿意的工作offer就是這麼簡單
http://www.ujiuye.com/zt/jyfc/?wt.bd=qzb36000j