PHP 開發 APP 介面 --JSON、XML結合篇
阿新 • • 發佈:2018-11-19
要求:
1.在一個類中封裝多種資料通訊方法(JSON,XML),並且只通過一個入口選擇需要的資料通訊格式
2.客戶端開發工程師可以自行選擇資料傳輸格式(GET 方式)
response.php
<?php class Response{ const JSON = 'json'; //封裝的綜合方法,預設的資料型別為json public static function show($code,$message = '',$data,$type = self::JSON){ if(!is_numeric($code)){ return ''; } //供測試陣列使用 $result = array( 'code' => $code, 'message' => $message, 'data' => $data ); //通過get引數判斷通訊資料型別 $typelist = array('json','xml','array'); // array為測試使用 if(isset($_GET['type'])){ if(in_array(strtolower($_GET['type']),$typelist)){ $type = strtolower($_GET['type']); }else{ $type = self::JSON; } }else{ $type = self::JSON; } if($type == 'json'){ self::json($code,$message = '',$data); }else if($type == 'xml'){ self::xml($code,$message = '',$data); }else if($type == 'array'){ var_dump($result); //僅供測試 } } /** * 按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 xml($code,$message,$data){ if(!is_numeric($code)){ return ''; } $result = array( 'code' => $code, 'message' => $message, 'data' => $data ); //修改 http 頭資訊 header("Content-Type:text/xml"); //xml頭資訊 $xml = "<?xml version='1.0' encoding='utf-8'?>"; //根節點開始標籤 $xml .= "<root>"; $xml .= self::xmlToEncode($result); //根節點結束標籤 $xml .= "</root>"; echo $xml; exit(); } //解析$result至xml public static function xmlToEncode($data){ $xml = $attr = ""; foreach($data as $k=>$v){ //如果$k是數字(data(code,message,data中的data)資料裡面還含有索引陣列),要進行如下判斷 if(is_numeric($k)){ $attr = "id='{$k}'"; $k = 'item '; } $xml .= "<{$k}{$attr}>"; //如果$v是陣列,則遞迴呼叫該方法 if(is_array($v)){ $xml .= self::xmlToEncode($v); }else{ $xml .= $v; } $xml .= "</{$k}>"; } return $xml; } }
test.php
<?php require 'response.php'; $data = array( 'id'=>1, 'name'=>'Mary', 'type'=>array(1,3,6) ); Response::show(200,'資料返回成功',$data);
測試url:
http://127.0.0.17/php/APP/test.php
http://127.0.0.17/php/APP/test.php?type=json
http://127.0.0.17/php/APP/test.php?type=xml
http://127.0.0.17/php/APP/test.php?type=array
http://127.0.0.17/php/APP/test.php?type=XML (返回 xml 資料)
http://127.0.0.17/php/APP/test.php?type=arr (返回 json 資料)