# JSON-RPC vs gRPC vs REST 技術比較表
比較三種常見的 API 通訊技術:**JSON-RPC**、**gRPC**、**REST**,涵蓋傳輸格式、效能、擴充性、適用場景等面向。
## 📊 技術特性比較
| 特性 / 技術 | JSON-RPC | gRPC | REST |
|----------------------|------------------------------------------|----------------------------------------------|-------------------------------------------|
| 🔧 傳輸協定 | 通常使用 HTTP/HTTPS(POST) | HTTP/2(可支援 HTTP/1.1 降級) | HTTP/HTTPS(GET/POST/PUT/DELETE) |
| 📦 資料格式 | JSON | Protocol Buffers(Protobuf) | JSON(可選 XML、YAML 等) |
| 🧠 介面定義方式 | 無固定格式,靠慣例(如 `method`, `params`) | 需定義 `.proto` 檔案 | 自由定義 URL + HTTP 動詞 + DTO |
| 🛠️ 工具支援度 | 中等,手動較多 | 高,自動生成 Client/Server stub | 高,原生支援於各大 Web 框架 |
| 📈 效能 | 中等 | 高(快、低延遲) | 中等偏低(人類可讀) |
| 📚 可讀性 | 高(JSON 格式) | 低(binary 格式) | 高(REST URL + JSON) |
| 🔁 雙向通訊 / 推播 | 不原生支援 | 支援 bidirectional streaming | 不原生支援(需 WebSocket 等實作) |
| 🌎 語言支援 | 廣泛(JSON 是標準格式) | 非常廣泛(官方支援多種語言) | 廣泛(HTTP/JSON 為萬國通用) |
| 🔌 第三方整合 | 中等,需設計統一格式 | 較弱(需 client 生成碼) | 最佳(最適合公開 API) |
| 🧩 結構自由度 | 高(可定義自有 method/action 格式) | 中(需配合 proto 規格) | 高(依 URL 與資源設計) |
## ✅ 適用場景建議
| 情境/需求 | 建議技術 | 理由 |
|--------------------------------------|------------------|----------------------------------|
| 自訂 RPC 框架、物件導向參數傳遞 | JSON-RPC | 結構自由、易整合自有系統如 ERP |
| 高效能、微服務內部 RPC 通訊 | gRPC | 高速、內部通訊最佳選擇 |
| 開放給第三方、前端或行動裝置使用 | REST | 簡單通用、無需額外工具 |
| 需要串流(如影像、IoT、大量即時資料) | gRPC | 支援雙向/單向 Streaming |
| 想省開發時間、快速上手 | REST / JSON-RPC | JSON 可讀性高,易除錯 |