API 介面需統一回應格式(狀態碼、訊息、資料),並支援多種輸出格式(JSON、XML、JSONP、PHP 陣列)。本文提供 DataReturn 類別,封裝格式化邏輯:自訂欄位對應名稱、XML 根節點、JSONP 回呼函數、CDATA 自動包裹、輸出前清理緩衝區。
$param = array(
'type' => 'JSON', // JSON, XML, CALLBACK, ARRAY
'retcode' => 1000, // 狀態碼
'msg' => '', // 訊息
'data' => array(...), // 資料載體
'format' => array( // 輸出鍵名對應
'retcode' => 'status',
'msg' => 'info',
'data' => 'result'
),
'xmlroot' => 'xmlroot', // XML 根節點
'callback' => 'callback' // JSONP 回呼函數名
);
<?php
class DataReturn {
private $type; private $xmlroot; private $callback; private $returnData;
public function __construct($param=array()) { /* 參數預設與建構回應陣列 */ }
public function data_return() { /* 依 type 分派輸出方法,最後 exit */ }
private function json_return() { /* JSON 或 JSONP */ }
private function xml_return() { /* XML 標頭 + xml_encode */ }
private function callback_return() { /* 輸出 */ }
private function array_return() { /* print_r 易讀輸出 */ }
private function xml_encode($data, $root, $encoding) { /* 遞迴陣列轉 XML */ }
private function data_to_xml($data) { /* 陣列/物件遞迴轉 XML 片段 */ }
private function cdata($val) { /* 非純英數字元自動包裹 CDATA */ }
private function exists($obj,$key) { /* 多層鍵名檢查 */ }
}
?>
<?php
require_once('DataReturn.class.php');
$param = array(
'type' => 'JSON',
'retcode' => '1000',
'data' => array('id'=>'100','name'=>'fdipzone','gender'=>1,'age'=>28),
'format' => array('retcode'=>'status','msg'=>'info','data'=>'result')
);
$obj = new DataReturn($param);
$obj->data_return();
{"status":"1000","info":"","result":{"id":"100","name":"fdipzone","gender":1,"age":28}}
<?xml version="1.0" encoding="utf-8"?> <xmlroot> <status>1000</status> <info></info> <result> <id>100</id> <name><![CDATA[fdipzone]]></name> <gender>1</gender> <age>28</age> </result> </xmlroot>
retcode/msg/data,輸出時對應自訂名稱,便於版本演進。,確保 XML 合法。ob_clean() 避免前段輸出干擾 API 格式。DataReturn 類別提供輕量級的 API 回應標準化方案,適合中小型專案快速建立一致介面。大型專案建議採用框架內建的 Resource/Transformer 機制(如 Laravel API Resources、Fractal)或標準規格(JSON:API、OpenAPI)。