| 特性 | B/S (瀏覽器) | APP (原生/混合) |
| 網址可見性 | 地址列可見 | 封裝在代碼中,用戶不可見 |
| 回傳格式 | HTML (含樣式/腳本) | 純資料:JSON / XML |
| 狀態管理 | Cookie/Session | Token (JWT) / 自訂 Header |
JSON vs XML 深度對比
| 維度 | JSON | XML |
| 可讀性 | 結構簡潔,Key-Value 直觀 | 標籤巢狀,層次分明但冗長 |
| 資料體積 | ✅ 無標籤,約 XML 60-70% | 較大,含開關標籤 |
| 解析速度 | ✅ 原生物件映射,極快 | 需 DOM/SAX 解析,較慢 |
| PHP 生成 | ✅ json_encode($arr) 一行搞定 | 需拼接字串或用 XMLWriter |
| 型別支援 | 字串、數字、布林、null、陣列、物件 | 僅字串,型別需自行約定 |
| 跨語言 | ✅ 標準化,所有語言支援 | ✅ 標準化 |
| 註解支援 | ❌ 無 | ✅ 有 |
| Schema 驗證 | JSON Schema (較新) | XSD/DTD (成熟) |
JSON 兩種常見結構
// 1. 物件陣列(推薦,語意清晰)
[
{"title": "文章一", "author": "張三", "date": "2024-01-01"},
{"title": "文章二", "author": "李四", "date": "2024-01-02"}
]
// 2. 單一物件(單筆資料)
{"title": "文章一", "author": "張三", "date": "2024-01-01"}
PHP 生成 JSON / XML 範例
JSON(標準作法)
<?php
header('Content-Type: application/json; charset=utf-8');
$data = [
'code' => 200,
'message' => 'success',
'data' => [
['id' => 1, 'name' => '商品A', 'price' => 100],
['id' => 2, 'name' => '商品B', 'price' => 200],
],
];
echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
?>
XML(特殊需求時)
<?php
header('Content-Type: application/xml; charset=utf-8');
$data = [
'code' => 200,
'message' => 'success',
'items' => [
['id' => 1, 'name' => '商品A', 'price' => 100],
['id' => 2, 'name' => '商品B', 'price' => 200],
],
];
$xml = new SimpleXMLElement('<?xml version="1.0" encoding="utf-8"?><response/>');
arrayToXml($data, $xml);
function arrayToXml(array $data, SimpleXMLElement $xml) {
foreach ($data as $key => $value) {
if (is_array($value)) {
$child = $xml->addChild($key);
arrayToXml($value, $child);
} else {
$xml->addChild($key, $value);
}
}
}
echo $xml->asXML();
?>
APP 介面功能分類
| 類型 | HTTP Method | 用途 | 範例 |
| 獲取資料 | GET | 首頁列表、詳情、搜尋 | GET /api/articles?page=1 |
| 提交資料 | POST | 註冊、登入、發文、評論 | POST /api/feedback |
| 更新資料 | PUT/PATCH | 修改個人資料、更新文章 | PUT /api/user/profile |
| 刪除資料 | DELETE | 刪除評論、取消收藏 | DELETE /api/favorite/123 |
| 版本檢查 | POST | 上傳當前版本,回傳是否需更新 | POST /api/app/check_update |
選型建議決策樹
需要支援舊版 Android (≤2.3) 或特定企業系統要求 XML?
├─ 是 → 使用 XML (SimpleXMLElement / XMLWriter)
└─ 否 → 使用 JSON (預設首選)
├─ 高頻、大量列表 → JSON (體積小、解析快)
├─ 需嚴格 Schema 驗證 → JSON Schema 或 XML+XSD
└─ 需資料註解/文檔化 → JSON + 額外文檔 或 XML
安全性共通建議
- 全站 HTTPS,防止中間人竄改
- API 簽名(AppId + AppSecret + Timestamp + Nonce)防重放
- 敏感操作需 Token 驗證(JWT 或 OAuth2)
- 限流:同一 IP/用戶每分鐘請求上限
- 輸入驗證:長度、型別、格式、XSS/注入過濾
現代 APP 開發 JSON 為首選,XML 僅在相容舊系統或特定企業標準時使用。希望本文助您做出正確選型。
- 上一篇文章: PHP 封裝 JSON API 通訊介面標準化實作
- 下一篇文章: PHP 5.4 新特性 Traits 完整指南:程式碼複用的新選擇
Copyright ©
程式碼之家 All Rights Reserved