在日常api开发中遇到所遇到的问题,我们知道api接口开发一般有两种方式:json,xml这里我整理了一个api接口类可以规定显示方式:api.phpclass Response {
const JSON = 'json';
/*
*按综合方式输出通讯数据
*@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') {
self::json($code, $message, $data);
exit;
} elseif ($type == "array") {
echo "
";
var_dump($result);
} elseif ($type == 'xml') {
self::xmlEncode($code, $message, $data);
exit;
} else {
//Todo
}
}
/*
*按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
);
echo json_encode($result);
exit;
}
/*
*按xml方式输出通讯数据
*@param integer $code 状态码
*@param string $message 提示信息
*@param array $data 数据
*return string
*/
public static function xmlEncode($code, $message = "", $data = array()) {
if(!is_numeric($code)){
return '';
}
$result = array(
'code' => $code,
'message' => $message,
'data' => $data
);
header("Content-Type:text/xml");
$xml = "<?xml version='1.0' encoding='UTF-8' ?>".PHP_EOL;
$xml .="".PHP_EOL;
$xml .= self::xmlToEncode($result);
$xml .="";
echo $xml;
}
public static function xmlToEncode($data) {
$xml = $attr = "";
foreach ($data as $key => $value) {
if (is_numeric($key)) {
$attr = " id='{$key}'";
$key = "item";
}
$xml .= "";
//判断是否是数组,如果是数组就递归,再次调用自身,如果不是直接输出
$xml .= is_array($value) ? self::xmlToEncode($value) : $value;
$xml .= "{$key}>".PHP_EOL;
}
return $xml;
}
}
调用方式如下(支持传递参数?type=json/xml规定显示数据类型):require_once('./api.php');
$data = array(
'id' => 1,
'name' => 'donglianyou',
'type' => array(4,5,6),
'test' => array(1,34,65=>array(123,'good'),),
);
Response::show(200, 'success', $data, 'json');