軟體工程師職涯升級計畫啟動!立即預約職涯諮詢、履歷健檢或模擬面試👈,為您的加薪做好準備!
在理解了「前後端分離」的概念後,接下來我們要進一步探討 Web API 的設計核心。API 不只是資料的橋梁,更是開發效率與可維護性的關鍵。
本篇將聚焦於主流的兩大 API 設計風格:RESTful API 與 GraphQL,同時介紹它們的適用場景、實作方式與優缺點。讓你能夠根據需求做出明智選擇。
🌐 RESTful API:遵守 HTTP 規範的資源導向設計
什麼是 REST?
REST(Representational State Transfer)是一種架構風格,強調透過 HTTP 方法操作資源。遵循 REST 設計原則的 API 被稱為 RESTful API,其特點是簡潔、可預測、易於理解與快取支援佳。RESTful 與非 RESTful 的設計差異
🧱 非 RESTful API 範例:
bash
複製編輯POST /getData → 獲取資料
POST /createData → 新增資料
DELETE /deleteData?id=1 → 刪除資料
每個動作都需自訂端點與動詞,導致命名風格混亂、維護困難。
✅ RESTful API 範例:
bash
複製編輯GET /data → 獲取資料
POST /data → 新增資料
DELETE /data/1 → 刪除資料(指定 id)
動作透過 HTTP Method 表達(GET、POST、DELETE),端點語意清晰一致。
RESTful API 的優勢
- 🚀 快取機制成熟(如 HTTP 304)
- 👀 結構清晰、可讀性佳
- 🔐 配合 OAuth 等權限控制簡便
但也不是萬靈丹…
以 Airbnb 為例,一個搜尋介面可能需要顯示房源、體驗活動與地圖資訊。若這些資料分散於多個 RESTful 資源,就需多次請求才能完整呈現內容。
此外,RESTful 難以支援 高度客製化的查詢需求。常見解法如:
- 單一 API 返回所有資料,由前端手動篩選
- 不斷增加查詢參數與邏輯,導致維護成本升高
- 新增多個 API,造成版本與資源爆炸
🔎 GraphQL:讓前端說了算的查詢語言
GraphQL 是由 Facebook 在 2012 年開發的 API 查詢語言,於 2015 年開源。其核心理念是:讓前端定義想要的資料結構,後端配合提供精準資料。
為什麼需要 GraphQL?
移動裝置的挑戰:
- 裝置效能受限,不適合處理多重請求
- 網路環境不穩,頻繁請求易造成卡頓
RESTful 的痛點:
- Overfetching:獲得過多不需要的資料
- Underfetching:為取得完整資料,需多次請求,形成「瀑布式請求」
- 資料 Schema 與需求不同步
GraphQL 範例:查詢作者與文章
graphql
複製編輯query {
author(id: "7") {
id
name
avatarUrl
articles(limit: 2) {
name
urlSlug
}
}
}
對應回傳:
json
複製編輯{
"data": {
"author": {
"id": "7",
"name": "Robin Wieruch",
"avatarUrl": "https://domain.com/authors/7",
"articles": [
{
"name": "The Road to learn React",
"urlSlug": "the-road-to-learn-react"
},
{
"name": "React Testing Tutorial",
"urlSlug": "react-testing-tutorial"
}
]
}
}
}
只需一次請求,便能取得多層級資料,且欄位精簡、剛好符合需求。
📊 RESTful vs GraphQL 快速比較

✅ GraphQL 的優點總結
- 節省頻寬:只獲取需要的欄位資料
- 高彈性查詢:前端自由組合資料結構
- 互動式開發體驗:工具如 GraphiQL、Apollo 可即時測試
- Schema 驅動開發:可自動生成 API 文件,降低溝通成本
⚠️ GraphQL 的挑戰與限制
- 後端查詢成本增加
- 一個複雜查詢可能跨多個資料來源或 DB 查詢,導致效能瓶頸
- 快取困難
- 請求結構高度彈性,無法使用傳統 HTTP 快取
- 查詢限制困難
- REST 可輕易做速率限制(Rate Limiting),但 GraphQL 查詢複雜度不一,難以量化
- 安全風險增加
- 若沒設好查詢深度限制,可能導致惡意用戶發動「查詢炸彈」
🧠 結語:如何選擇 REST 與 GraphQL?

如果你正在開發一個高度模組化、資料型態多元的產品(如電商平台、內容聚合平台),GraphQL 提供的彈性會帶來極大好處;反之,若開發的是單純 CRUD 應用,RESTful 已足夠應付,且學習成本較低。
📚 延伸閱讀推薦:
需要更多實戰案例或是專案導入建議?歡迎留言或私訊交流 👇
下一篇將帶你了解 API 認證方式與 Proxy 架構設計,敬請期待!