1485 字
7 分鐘

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 根目錄執行:

Terminal window
rg -n \
--glob '!node_modules/**' \
--glob '!dist/**' \
'workers/namespaces' \
.

接著再搜尋較寬的關鍵字,避免 URL 是由多段字串組成:

Terminal window
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:

Terminal window
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 namespaceHTTP status、JSON success、namespace ID
list keyspagination、key 名稱與順序約定
metadatakey 的 metadata 欄位與 encoding
valueresponse body、Content-Type、空值處理
write/deletemethod、權限、測試 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

Cloudflare Changelog:Workers KV legacy namespace routes

Cloudflare Workers KV API

Cloudflare Workers KV API 路徑即將淘汰:如何從 workers/namespaces 遷移
https://laplusda.com/posts/cloudflare-workers-kv-api-migration/
作者
Zero
發佈於
2026-08-05
許可協議
CC BY-NC-SA 4.0
這篇文章有幫助嗎?

回報錯字、失效連結,或告訴我你想看的延伸主題。