实现xml和json接口(第一篇)

这两天看了关于xml、json格式的接口实现视频,在此做一个总结,发现按着视频码代码也会有坑。先把整个过程中我所不了解的知识,或者没有意识到的流程记录一下:

接口开发:
一、json与xml对比:
1、可读性:xml好;
2、生成数据方面:json好;
3、传输速度方面:json好;
二、app接口做的哪些事?
获取数据:从数据库或缓存中获取数据;
提交数据:通过接口提交数据给服务器;用get、post方式;

三、iconv('UTF-8','GBK',$arr);转化编码格式的函数,将数组的utf8格式转化为GBK

四、通信数据标准格式:
1、code:状态码(200,400等)
2、message:提示信息
3、data:返回数据

五、PHP生成xml数据
1、组装字符串;
2、DOMDocument类;
3、XMLWriter;
4、simpleqWriter;

六、缓存技术:memcache \redis

七、单例模式:一个类只能拥有一个实例;
1、构造函数非public;
2、拥有一个保存类的静态变量;
3、拥有一个实例化类的公共静态方法;

八、APP接口开发
方案一、读取数据库方式开发首页接口
应用场景:数据时效性比较高的系统!
1、从数据库获取信息;
2、封装;
3、生成接口数据;

方案二、读取缓存方式开发首页接口
用途:减少数据库压力
1、第一次从数据库获取信息后,将数据进行缓存;
2、之后的请求都从缓存中获取数据,就不需要再连接数据库了;

方案三、定时读取缓存方式开发首页接口
通过设置定时任务,提前将数据库数据获取出来进行缓存,然后
客户端发出请求时,服务器直接调用缓存数据;

九、使用Start BlueStacks安卓模拟器

十、静态缓存开发接口;

十一、基本参数传递方式和获取方法:
1、get
2、post
3、header       $_SERVER获取(这个需要注意到)

接下来直接上代码,其实这段代码并不难,只是想把一段代码写规范,能够考虑清楚大部分情况比较难,这里记录一下我学到的,以及未来写代码需要注意的:

第一点:代码封装和包容性,此处将数组转化为xml、json格式代码进行了封装,并通过show函数按前端意愿进行调用。即前端想用xml格式数据,他们就可以在地址栏中加入参数format=xml;想用json格式数据可以不带参数;提供了较高的包容性,这是我目前需要学习的,这可能也是接口开发的基准——后端为前端服务。

第二点:注释。包括对此类的注释;对各个函数、传入函数的参数和数据类型、返回值类型的注释;当然还有某些较难理解的代码的注释;以及对某些出过错的代码的注释,不然久了就忘了(不过这个可以自己拿小本本记下,比如$xml .= "<{$key} {$attr}>";//两个变量之间需要加上空格!不然会报错!)。

第三点:对函数传参的一个把控,可能会提升代码效率?。比如show函数中的$type=self::JSON,如果是我可能就直接是$type="json"了,这里是用常量来提升代码效率吗?还是说是为了规范?这个需要自己去找答案。

第四点:整段代码用了四个函数,一开始并不清楚要用四个函数;只是在写的过程中,慢慢的进行提炼,精简;下面这段代码的流程是先定义json()—>xml()—>xmlencode()—>show();xmlencode()函数,只是为了能够输出我们想要的那种xml格式而努力。这段代码的注意点已经注释好了。

<?php
class Response{
	const JSON = "json";
	
	/*
	*按type方式输出通信数据
	*@param integer $code 状态码
	*@param string $message 提示信息
	*@param array $data 数据
	*@param array $type 数据类型
	*return string
	*/
	public static function show($code,$message='',$data=array(),$type=self::JSON){
		if(!is_numeric($code)){
			return "";
		}
		
		$type = isset($_GET['format']) ? $_GET['format']:self::JSON;
		
		$result = array(
		'code'=>$code,
		'message'=>$message,
		'data'=>$data,
		);
		
		if($type == 'json'){
			return self::json($code,$message,$data);
			exit;
		}elseif($type == 'array'){
			var_dump($result);
		}elseif($type == 'xml'){
			return self::xml($code,$message,$data);
			exit;
		}
		
	}
		
	
	/*
	*按json方式输出通信数据
	*@param integer $code 状态码
	*@param string $message 提示信息
	*@param array $data 数据
	*return string
	*/
	public static function json($code,$message='',$data=array()){
		if(!is_numeric($code)){
			return '';
		}
		
		$result = array(
		'code'=>$code,
		'message'=>$message,
		'data'=>$data,
		);
		return json_encode($result);
		exit;
	}
	
	/*
	*按xml方式输出通信数据
	*@param integer $code 状态码
	*@param string $message 提示信息
	*@param array $data 数据
	*return string
	*/
	public static function xml($code,$message,$data=array()){
		if(!is_numeric($code)){
			return "";
		}
		
		$result = array(
		'code'=>$code,
		'message'=>$message,
		'data'=>$data,
		);
		
		header("Content-Type:text/xml");//发送http头信息,可查看xml格式数据
		$xml = "<?xml version='1.0' encoding='UTF-8'?>";
		$xml .= "<root>";
		$xml .= "<code>".$code."</code>";
		$xml .= "<message>".$message."</message>";
		$xml .= "<data>";
		$xml .= self::xmlencode($data);
		$xml .= "</data>";
		$xml .= "</root>";
		return $xml;
		exit;
	}
	
	/*
	*对$data生成xml数据进行封装
	*@param array $data 数据
	*return string
	*/
	public static function xmlencode($data){
		$xml = $attr = "";
		foreach($data as $key => $value){
			//xml节点不能为数字
			if(is_numeric($key)){
				$attr = "id='{$key}'";
				$key = "item";
			}
			$xml .= "<{$key} {$attr}>";//这里需要加上空格!
			//注意调用self::xmlencode!!!
			$xml .= is_array($value) ? self::xmlencode($value) : $value;//采用递归
			$xml .= "</{$key}>";
		}
		return $xml;
	}
	
	
}


?>

 

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值