Cloudflare Workers KV API 路徑即將淘汰:如何從 workers/namespaces 遷移
如果你的管理工具、CI script 或後端服務直接呼叫 Cloudflare Workers KV REST API,現在應該先搜尋 /workers/namespaces/。Cloudflare 已在 2026-07-15 將這組 legacy namespace routes 標為 deprecated,並列出 2026-10-15 的 end-of-life 日期;到時舊路徑不再支援。
這次遷移的好處是範圍很明確:Cloudflare 官方說明,替代 API 和舊 API 的 request parameters 與 response payloads 相同,主要動作是把路徑中的 /workers/namespaces/ 改成 /storage/kv/namespaces/。但仍要先找出所有呼叫入口,避免只改一個 script,讓另一個環境繼續使用舊路徑。
先看新舊 endpoint 對照
所有 endpoint 的共同變化如下:
| 用途 | 舊路徑 | 新路徑 |
|---|---|---|
| 列出/建立 namespace | /accounts/{account_id}/workers/namespaces | /accounts/{account_id}/storage/kv/namespaces |
| 讀取/改名/刪除 namespace | /accounts/{account_id}/workers/namespaces/{namespace_id} | /accounts/{account_id}/storage/kv/namespaces/{namespace_id} |
| 列出 keys | /accounts/{account_id}/workers/namespaces/{namespace_id}/keys | /accounts/{account_id}/storage/kv/namespaces/{namespace_id}/keys |
| 讀取 metadata | /accounts/{account_id}/workers/namespaces/{namespace_id}/metadata/{key_name} | /accounts/{account_id}/storage/kv/namespaces/{namespace_id}/metadata/{key_name} |
| 讀取/寫入/刪除 value | /accounts/{account_id}/workers/namespaces/{namespace_id}/values/{key_name} | /accounts/{account_id}/storage/kv/namespaces/{namespace_id}/values/{key_name} |
這不是把 Workers binding 名稱改掉。Worker 程式碼裡的 env.KV.get()、env.KV.put() 等 binding API 不會因為 REST 管理路徑棄用,就自動變成另一個 binding;本次要盤點的是直接組 Cloudflare API URL 的外部整合。
先從 repository 和部署設定找出舊路徑
在 repository 根目錄執行:
rg -n \ --glob '!node_modules/**' \ --glob '!dist/**' \ 'workers/namespaces' \ .接著再搜尋較寬的關鍵字,避免 URL 是由多段字串組成:
rg -n \ --glob '!node_modules/**' \ --glob '!dist/**' \ 'workers/namespaces|storage/kv/namespaces|CLOUDFLARE_API_TOKEN|namespace_id' \ .要特別查看 .github/workflows/、Terraform/Pulumi 設定、shell script、後端 SDK wrapper 和監控工具。搜尋結果是盤點清單,不是可以直接批次取代的授權;先確認每個命中點是否真的在呼叫 Workers KV API。
先用讀取請求驗證新的 base path
準備好帳號 ID、API token 後,可以先用 list namespaces 做不涉及資料寫入的 smoke test:
export ACCOUNT_ID='你的 Cloudflare account ID'export CLOUDFLARE_API_TOKEN='只在目前 shell 使用的 token'
curl --fail-with-body \ -H "Authorization: Bearer ${CLOUDFLARE_API_TOKEN}" \ "https://api.cloudflare.com/client/v4/accounts/${ACCOUNT_ID}/storage/kv/namespaces"這個請求要在測試帳號或已確認權限的環境執行。不要把 token 寫進 shell script、Markdown、CI log 或文章範例的固定值;上面的環境變數只是示意名稱。
若整合原本使用 API token 以外的認證方式,先回到 Cloudflare API authentication 文件確認該帳號的合法 scheme。路徑替換不會自動修正權限、account scope 或 URL encoding 問題。
value key 仍要處理 URL encoding
替換 namespace 這一段不會改變 key 的語意,但 key_name 仍是 URL path 的一部分。若 key 包含空白、斜線、問號或非 ASCII 字元,呼叫端應沿用原本的 URL encoding 策略,不要直接把原始 key 拼到 URL:
const path = [ 'accounts', accountId, 'storage', 'kv', 'namespaces', namespaceId, 'values', encodeURIComponent(keyName),].join('/');
const response = await fetch(`https://api.cloudflare.com/client/v4/${path}`, { headers: { Authorization: `Bearer ${token}`, },});如果原本的 client 已經負責 encoding,遷移時不要為了換 path 又重複 encode 一次。最安全的做法是用一個已知包含特殊字元的測試 key,對照新路徑的讀取結果與原本的預期。
把遷移拆成盤點、替換、回歸三關
1. 盤點
記下每個呼叫點的 method、endpoint、namespace ID 來源、認證方式、執行環境和負責人。不要只記「這支程式有用 KV」,因為 list、metadata 和 value endpoint 的路徑層級不同。
2. 替換
只修改 URL path segment,保留 HTTP method、query parameters、request body、response parser 和重試策略。先在單一環境提交 diff,讓 review 可以確認沒有把 /workers/namespaces 以外的 API 路徑一起改掉。
3. 回歸
至少驗證:列出 namespace、列出 keys、讀取 metadata、讀取 value、寫入測試 value、刪除測試 value。若 production 不適合寫入,先使用專用測試 namespace;不要用「GET list 成功」推論所有 method 都已正確遷移。
可以把新舊呼叫的預期整理成表:
| 驗證 | 要比對的內容 |
|---|---|
| list namespace | HTTP status、JSON success、namespace ID |
| list keys | pagination、key 名稱與順序約定 |
| metadata | key 的 metadata 欄位與 encoding |
| value | response body、Content-Type、空值處理 |
| write/delete | method、權限、測試 namespace 的最終狀態 |
官方文件說新舊 endpoint 的 parameters 和 payloads 相同,因此驗證重點應放在「呼叫是否真的走新 path」和「整合是否仍保留原本的錯誤處理」,而不是另寫一套資料格式。
這幾種改法看似合理,其實會擴大風險
- 只改主 repository,忘記 CI 或內部工具:部署後還是可能有 cron、管理後台或 migration script 呼叫舊路徑。
- 把 binding API 一起改名:REST API 路徑和 Worker binding 是不同層,不能把
env.KV任意改成env.storage。 - 直接全域取代
namespaces:Cloudflare 其他產品或 API 可能也使用相同字串,應以完整 path 和呼叫上下文判斷。 - 用新增 namespace 來測 production:建立、改名與刪除 namespace 都會改變帳號資源,先用 read-only list 做第一關。
- 把 deadline 寫成立刻失效:Cloudflare 的公告區分 deprecated date 和 end-of-life date;文章查核日是 2026-08-05,正式停用日期仍以官方文件為準。
結論:這次是路徑遷移,不是資料搬家
Workers KV legacy namespace routes 的遷移重點,是把 /workers/namespaces/ 改成 /storage/kv/namespaces/,並確認所有外部 API 呼叫都使用新 path。因為參數和 response payload 維持不變,最值得投入的時間是完整盤點與 method-level 回歸,而不是重寫 KV 資料模型。
常見問題
Q: Workers KV 的舊 API 路徑什麼時候不能用了?
A: Cloudflare 文件列出的 legacy route deprecated date 是 2026-07-15,end-of-life date 是 2026-10-15。到 end-of-life 後,/accounts/{account_id}/workers/namespaces/* 不再支援;仍直接呼叫 REST API 的整合應在期限前改用 /storage/kv/namespaces/*。
Q: 只使用 env.KV binding 的 Worker 也要修改嗎?
A: 本次公告針對的是外部呼叫 Cloudflare API 的 legacy namespace routes。env.KV.get()、env.KV.put() 這類 Worker binding 介面不是同一條 REST URL;仍應依自己的 Wrangler、Workers 文件和 runtime 版本確認,但不要把 binding 名稱當成這次 path migration 的替換目標。
Q: 新舊 Workers KV API 的 request body 要重寫嗎?
A: Cloudflare 說明替代路徑和舊路徑的 request parameters 與 response payloads 相同。遷移時先只改 path,再用 list、metadata、value 和寫入/刪除測試確認整合行為;若同時改 body 或 error parser,出錯時會難以判斷根因。
參考資料:
Cloudflare Fundamentals:API deprecations
回報錯字、失效連結,或告訴我你想看的延伸主題。