你有在使用 REST API 嗎?你知道 GET、POST、PUT、DELETE……
但你知道有一個新的 HTTP 方法在 2026 年 6 月 標準化了嗎?它叫做 QUERY,而且它解決了一個開發者已經繞路處理了 16 年的問題。
這是自 PATCH(2010)以來第一個新的標準 HTTP 方法。沒錯,你沒看錯:HTTP 動詞已經 16 年 沒有重大創新了。
GET 方法的問題你想在後端建立一個端點來取得訂單資訊,並加入篩選條件。因為你是在取得資源,而且這也是 REST 規範,所以這個端點會使用 GET 方法。
你在 URL 上加上不同參數來篩選結果,只回傳符合搜尋條件的訂單:
GET /orders?select=surname,givenname,email&limit=10&match="email=*@example.*"
問題:
8000 字元)POST 呢?為了處理 GET 請求的各種問題,你可能會改用 POST 請求:
POST /orders HTTP/1.1
Host: api.example.org
Content-Type: application/x-www-form-urlencoded
select=surname,givenname,email&limit=10&match="email=*@example.*"
問題:
POST 不是冪等的 → 如果網路中斷,你不能安全地重新送出同一個請求QUERYQUERY 給你兩全其美的好處:
QUERY /orders HTTP/1.1
Host: api.example.org
Content-Type: application/x-www-form-urlencoded
Accept: application/json
select=surname,givenname,email&limit=10&match="email=*@example.*"
優點:
什麼是冪等性?
如果一個操作被呼叫多次,產生的結果和呼叫一次相同,那它就是冪等的。
具體例子:
- ✅
GET /users/123(冪等)→ 呼叫 1 次 = 呼叫 10 次 = 相同資料- ✅
QUERY /users(冪等)→ 重送 = 相同結果- ❌
POST /users(非冪等)→ 呼叫 1 次建立 1 位使用者,呼叫 2 次就建立 2 位使用者為什麼這很重要? 如果網路中斷,你可以安全地重送,不會產生重複資料或資料損壞。
GET 一樣)POST 一樣),而不是放在 URL 裡請求的 URI 與結果的 URI
傳統
POST(結果的 URI):POST /orders → 200 OK Content-Location: /results/xyz789
QUERY(請求的 URI):QUERY /orders → 200 OK Location: /saved-queries/42神奇之處:重放
/saved-queries/42會以 更新後的資料 重新執行同一個 SQL/JSONPath 查詢。具體來說:
# 之後... GET /saved-queries/42 # → 伺服器重新執行原本的 SQL 查詢 # → 你會拿到最新結果
它的用途:
多虧了 QUERY,我們終於能對複雜請求做出真正可用的 HTTP 快取。代理伺服器、CDN 和瀏覽器現在都能快取帶有請求本文的請求。這對效能來說非常重要。
我們也得到了 REST API 設計上的演進。與其寫成:
GET /api/users/active
GET /api/users/inactive
GET /api/users/premium
現在你可以:
QUERY /api/users
只要一個端點,就更容易 維護、保護 和 監控。
| 功能 | GET | POST | QUERY |
|---|---|---|---|
| 安全 | ✅ 是 | ❌ 否 | ✅ 是 |
| 冪等 | ✅ 是 | ❌ 否 | ✅ 是 |
| 允許本文 | ❌ 否 | ✅ 是 | ✅ 是 |
| 可快取 | ✅ 是 | ⚠️ 複雜 | ✅ 是 |
| 可安全重放 | ✅ 是 | ❌ 有風險 | ✅ 是 |
| 請求的 URI | ✅ 預設 | ❌ 否 | ✅ 可選 |
QUERY 終於為我們提供了一種執行複雜請求的解決方案。這是一個影響很大的「小」變更。這個新方法解決了開發者多年來一直繞道處理的真實問題。
此外,這個方法才剛在最近(2026 年 6 月)標準化,因此真正普及還需要一段時間。
在正式環境中使用之前,請先等實作更普及。現在最重要的是理解這個概念,並在未來的 API 架構中記住它。
這篇文章涵蓋了 QUERY 的理論與關鍵概念。但實際上要怎麼使用它呢?
在未來的文章中,我會探討 在 REST API 中實作 QUERY 的實務作法,展示如何建立支援這個新 HTTP 方法的 REST API,以及如何將它整合到真實世界的架構中。
敬請期待! 🚀