一、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封装数据,代码如下:

 <?php
class Response{
static public function datas($code,$message,$data,$type='json'){
switch($type){
case 'json':
return self::json($code,$message,$data);
break;
case 'xml':
return self::xml($code,$message,$data);
break;
case 'array':
$arr = array(
"code"=>$code,
"message" =>$message,
"data" =>$data,
);
var_dump($arr);
break;
default:
break;
}
}
//xml为了安全性在前面加static
static public function xml($code,$message,$data){
if(!is_numeric($code)){
return false;
}
if($message && $data){
$str = '<?xml version="1.0" encoding="UTF-8">
<item>
<code>'.$code.'</code>
<message>'.$message.'</message>
<data>';
$str.=self::item($data);
$str.='</data>
</item>';
return $str;
}else{
return false;
}
}
static public function item($data){
$str = "";
//打印var_dump($data);
foreach($data as $key =>$value){
if(is_array($value)){
$str .="<data$key>".self::item($value)."</data$key>\n";
}else{
$str .="<$key>{$value}</$key>\n";
}
}
return $str;
}
//json
static public function json($code,$message,$data){
if(!is_numeric($code)){
return false
}
if($message && $data){
$arr = array(
"code"=>$code,
"message" =>$message,
"data" =>$data,
);
return json_encode($arr);
}else{
return false;
}
}
}
$data = array(
array("name"=>"张三","age"=>"10"),
array("name"=>"李煜","age"=>"20"),
array("name"=>"李涛","age"=>"18"),
array("name"=>"马华","age"=>"20"),
array("name"=>"王子涵","age"=>"20"),
array("name"=>"李丽","age"=>"22"),
);
$type = isset($_GET['type'])?$_GET['type']:'json';
echo Response::datas("200","成功",$data,$type)
?>

七、数据缓存到文件中,代码如下:

 <?php
class Files{
public $dir;
public $ext = '.txt';
public $path;
public function __construct(){
$this->dir=dirname(__FILE__).'/data/';
}
//缓存数据
public function CacheData($data,$paths,$time,$filename){
//设置缓存文件
$this->path=$this->dir.$paths.$filename.$this->ext;
if(!file_exists(dirname($this->path))){
mkdir(dirname($this->path));
}
if($data){
// 设置数据,不足10位用0补全
$str = sprintf('010%d',$time).$data.time();
//数据存在的话,对数据进行缓存
file_put_contents($this->path,$str);
}else{
//判断文件是否存在
if(!file_exists($this->path)){
return false;
}
//如果数据为空,删除缓存
if(is_null($data)){
//删除文件
unlink($this->path);
}
//定时更新
$datas=file_get_contents($this->path);
$cacheTime=substr($datas,0,10);
$oldTime =substr($datas,-10);
if($oldTime+$cacheTime >time()){
return substr($datas,10,-10);
}else{
return false;
}
}
}
}
include "Response.php";
header('content-type:text/html;charset=utf-8');
$model=new Files();
//删除缓存
$model->CacheData(null,'user','','file1');
//$model->CacheData('数据',缓存到哪个文件中,缓存时间,'文件名file1')
//把数据缓存到data文件下的user文件夹的stem.txt中
//读取缓存
if($data=$model->CacheData('123','/user/',100,'file1')){
$data=json_decode($data,true);
var_dump($data);
echo "从文件获取数据";
}else{
//设置缓存
echo "设置数据";
$data = array(
array("name"=>"张三","age"=>"10"),
array("name"=>"李煜","age"=>"20"),
array("name"=>"李涛","age"=>"18"),
array("name"=>"马华","age"=>"20"),
array("name"=>"王子涵","age"=>"20"),
array("name"=>"李丽","age"=>"22"),
);
var_dump($data);
$str= Response::datas("200","成功",$data);
$model->CacheData($str,'/user/',100,'file1');
}
?>

json和xml封装数据、数据缓存到文件中的更多相关文章

  1. jQuery form插件的使用--处理server返回的JSON, XML,HTML数据

    详细代码: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> & ...

  2. Python3操作MySQL,查询数据并保存到文件中

    我们在测试过程中,可能需要到数据库中拉去一些数据,为从测试准备.比如最近在做接口性能测试的时候,就需要很多数据来支撑,所以就需要的数据库去查询数据,下面就是python3 查询 mysql 并且保存到 ...

  3. Java JSON、XML文件/字符串与Bean对象互转解析

    前言      在做web或者其他项目中,JSON与XML格式的数据是大家经常会碰见的2种.在与各种平台做数据对接的时候,JSON与XML格式也是基本的数据传递格式,本文主要简单的介绍JSON/XML ...

  4. iOS-数据持久化基础-JSON与XML数据解析

    解析的基本概念 所谓“解析”:从事先规定好的格式串中提取数据 解析的前提:提前约定好格式.数据提供方按照格式提供数据.数据获取方按照格式获取数据 iOS开发常见的解析:XML解析.JSON解析 一.X ...

  5. 玩转iOS开发 - JSON 和 Xml 数据解析

    前言 Json 和xml是网络开发中经常使用的数据格式,JSON轻量级.xml相对较复杂.所以如今用JSON的比例很大.基本上从server获取的返回数据都是JSON格式的,作为iOS开发人员,解析J ...

  6. 数据交换格式Json与XML

    什么是数据交换格式: 主流的有Json.XML.HTML. 数据交换格式的应用场景: 移动端(安卓,IOS)通讯方式采用http协议+Json格式的restful风格. 很多互联网公司都是用Http协 ...

  7. python数据处理(一)之供机器读取的数据 csv,json,xml

    代码与资料 https://github.com/jackiekazil/data-wrangling 1 csv 1.1导入csv数据 1.2将代码保存到文件中并在命令行中运行 2.json 2 导 ...

  8. PHP如何自动识别第三方Restful API的内容,自动渲染成 json、xml、html、serialize、csv、php等数据

    如题,PHP如何自动识别第三方Restful API的内容,自动渲染成 json.xml.html.serialize.csv.php等数据? 其实这也不难,因为Rest API也是基于http协议的 ...

  9. php生成json或者xml数据

    , ,'数据返回成功',$arr);echo $xml;?>

随机推荐

  1. iOS开发之 Lottie -- 炫酷的动效

    动效在软件开发中非常常见,炫酷的动画能提升应用的B格,然而由设计师的设计转化成程序猿GG的代码是个非常"痛苦"的过程.对于复杂动画,可能要花费很多时间去研究和实现.Lottie 的 ...

  2. VR全景智慧城市—城市就在你眼前

    "春风十里,不如有你",不知不觉间,身边的人已对VR不再陌生,VR眼镜的热销,VR体验店的火爆,VR游戏的向往等等.可见VR就是为生活而诞生! 2015年被称作VR行业的产业元年, ...

  3. Java之枚举----小试牛刀练习

    1.定义一个电脑品牌枚举类,其中只有固定的几个电脑品牌. 1.1简单枚举类,不设置属性和方法 package 第十四章枚举; public enum Brand { Lenovo,Dell,Accer ...

  4. python中文字符串编码问题

    接口测试的时候,发现接口返回内容是uncodie类型但是包含中文.在使用print进行打印时输出提示错误: UnicodeEncodeError: 'ascii' codec can't encode ...

  5. Spring学习(11)---JSR-250标准注解之 @Resource、@PostConstruct、@PreDestroy

    1)@Resource(JSR-250标准注解,推荐使用它来代替Spring专有的@Autowired注解) Spring 不但支持自己定义的@Autowired注解,还支持几个由JSR-250规范定 ...

  6. C语言和go语言之间的交互

    一.go代码中使用C代码 go代码中使用C代码,在go语言的函数块中,以注释的方式写入C代码,然后紧跟import "C" 即可在go代码中使用C函数 代码示例: go代码:tes ...

  7. PHP中的抽象类与抽象方法/静态属性和静态方法/PHP中的单利模式(单态模式)/串行化与反串行化(序列化与反序列化)/约束类型/魔术方法小结

      前  言  OOP  学习了好久的PHP,今天来总结一下PHP中的抽象类与抽象方法/静态属性和静态方法/PHP中的单利模式(单态模式)/串行化与反串行化(序列化与反序列化). 1  PHP中的抽象 ...

  8. Java IO学习笔记三

    Java IO学习笔记三 在整个IO包中,实际上就是分为字节流和字符流,但是除了这两个流之外,还存在了一组字节流-字符流的转换类. OutputStreamWriter:是Writer的子类,将输出的 ...

  9. centos ios镜像文件 安装详细

    1.挂载iOS镜像(先打开VM 选择虚拟机---->设置-->CD ---->使用ISO镜像文件 用浏览打开) 2.开始界面选择 3出现下面的界面 这是提示你是否扫描文件的完整性 我 ...

  10. ISO文件:AMD64和i386的区别

     下载kali系统时,出现两个选项:ADM64和i386,那么这两者的区别是什么?  i386=Intel 80386.其实i386通常被用来作为对Intel(英特尔)32位微处理器的统称. AMD6 ...