小蚂蚁学习APP接口开发(3)—— 统一调用入口方式封装通信接口

    接上篇 http://my.oschina.net/woshixiaomayi/blog/516871

    在类文件中包含了json返回数据的方法和xml返回数据的方法,在调用的时候需要调用不同的方法来实现不同类型数据的返回,今天再增加一个show()方法,作为一个统一调用的入口,只需要给它传入不同的参数就可以实现不同类型的数据返回了,比较方便。

<?php 

class Response{

	//设置一个常量作为类型的一个默认值
	const TYPE='json';

	/***********************************
	*	统一调用入口,$type参数为调用的类型,可以是json、xml、array打印数组使用等
	*	$param 	integer 	$code 		状态码
	*	$param 	string  	$message 	提示消息
	*	$param 	array   	$data 		具体数据
	*	$param  string 		$type 		返回类型
	*	return  mixed 		根据类型返回
	*
	******************************/
	public static function show($code,$message='',$data=array(),$type=self::TYPE){
		//做出一个验证,如果不是数字,就返回空
		if(!is_numeric($code)){
			return '';
		}

		//把传送进来的三个值,组装成一个数组
		$result	=	array(
			'code'		=>	$code,
			'message'	=>	$message,
			'data'		=>	$data	
		);

		//这一步的设计目的:可以通过地址栏get传参的方式从外部获取数据,非常灵活
		$type = isset($_GET['showtype'])?$_GET['showtype']:$type;	

		switch ($type) {
			case 'json':
				//如果是json,则返回json数据
				self::json($code,$message,$data);
				break;

			case 'xml':
				//如果是xml,这返回xml数据
				self::xml($code,$message,$data);
				break;

			case 'array':
				//如果传进来的值是array,这打印出这个数组
				var_dump($result);
				break;	
			
			default:
				#根据需要,处理业务逻辑
				echo '不能识别信息';
				break;
		}

	}

	/***********************************
	*	返回json格式数据
	*	$param 	integer 	$code
	*	$param 	string  	$message
	*	$param 	array   	$data
	*	return json
	*
	******************************/
	public static function json($code,$message='',$data=array()){
		
		//做出一个验证,如果不是数字,就返回空
		if(!is_numeric($code)){
			return '';
		}

		//把穿进来的三个值,组装成一个数组
		$result	=	array(
			'code'		=>	$code,
			'message'	=>	$message,
			'data'		=>	$data	
		);
		//json_encode()把数组转化成json格式输出	
		echo json_encode($result);
		exit;
	}

	/***********************************
	*	返回xml格式数据
	*	$param 	integer 	$code
	*	$param 	string  	$message
	*	$param 	array   	$data
	*	return json
	*
	******************************/
	public static function xml($code,$message='',$data=array()){

		//做出一个验证,如果不是数字,就返回空
		if(!is_numeric($code)){
			return '';
		}

		//把穿进来的三个值,组装成一个数组
		$result	=	array(
			'code'		=>	$code,
			'message'	=>	$message,
			'data'		=>	$data	
		);

		//便于浏览器输出xml格式文件	
		header('content-type:text/xml');
		//拼接xml
		$xml.="<?xml version='1.0' encoding='UTF-8' ?>";
		$xml.='<root>';
		$xml.=self::xmlToEncode($result);	//获取组装好的xml数据
		$xml.='</root>';

		echo $xml;
		exit;
	}

	public static function xmlToEncode($arr){
		//准备一个接收的空数组
		$xml='';
		//将这个数组的键,作为节点名称,值作为内容
		foreach ($arr as $key => $value) {
			/*约定一个规则,如果键是数字的话,格式为<item id='5'>aaa</item>*/
			if(is_numeric($key)){
				$attr	=	" id='{$key}'";//属性的值需要带上引号,不然报错
				$key	=	'item';
			}

			$xml.="<{$key}{$attr}>";
			//如果$value的值是个多维数组的话,需要递归遍历
			$xml.=is_array($value) ? self::xmlToEncode($value) : $value;	
			$xml.="</{$key}>";
		}
		return $xml;
	}
}

$array=array(
	'name'=>'学PHP的小蚂蚁',
	'age'=>'27',
	'sex'=>'male',
	'url'=>'博客 http://my.oschina.net/woshixiaomayi/blog',
	'like'=>array(
			'eat'=>'apple',
			'drink'=>'milk',
			'happy',
			'lucky'
		)
	);
Response::show(200,'success',$array,'array');
/*
	打印出来的样子
	<root>
		<code>200</code>
		<message>success</message>
		<data>
			<name>学PHP的小蚂蚁</name>
			<age>27</age>
			<sex>male</sex>
			<url>http:博客 //my.oschina.net/woshixiaomayi/blog</url>
			<like>
				<eat>apple</eat>
				<drink>milk</drink>
				<item id="0">happy</item>
				<item id="1">lucky</item>
			</like>
		</data>
</root>
*/

 ?>

    封装数据通信接口的方法基本上就是这个样子了,道理还是挺简单的。

转载于:https://my.oschina.net/woshixiaomayi/blog/517384

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值