呼叫 CBETA API 時,請在 HTTP header 帶上您的 API key:
Authorization: Bearer <api_key>
登入取得 API key (用 Google 或 GitHub 帳號登入即可)。
401。
結束日期會另行公告,請及早改成帶 key。
X-CBETA-API-Key: recommended 這個 header,
表示這次呼叫沒有帶 key,過渡期結束後就會失敗。
這是最可靠的自我檢查方式。
401,不會靜默放行
—— 這樣才不會讓您誤以為 key 設定正確,等過渡期結束才一次爆掉。
| 呼叫方式 | 需要 key? | 說明 |
|---|---|---|
| 研究者的程式或腳本(Python、R、Ruby…) | ✅ 需要 | 請登入取得 |
| 第三方 app、server-to-server 呼叫 | ✅ 需要 | 請登入取得 |
| 網頁前端(瀏覽器裡的 JavaScript) | ❌ 不支援 |
key 寫在前端 JS 裡等於公開,無法保護,
因此瀏覽器前端不能直接呼叫本 API,
我們也不接受網站來源(Origin)登記申請。
過渡期結束後,這類呼叫會收到 401。
請改由您自己的後端帶 key 呼叫,前端再向您的後端取資料。
|
curl -H "Authorization: Bearer $CBETA_API_KEY" \
"https://cbdata.dila.edu.tw/stable/search?q=%E7%84%A1%E5%B8%B8"
import os, requests
r = requests.get(
"https://cbdata.dila.edu.tw/stable/search",
params={"q": "無常"},
headers={"Authorization": f"Bearer {os.environ['CBETA_API_KEY']}"},
)
r.raise_for_status()
require 'faraday'
res = Faraday.get('https://cbdata.dila.edu.tw/stable/search',
{ q: '無常' },
{ 'Authorization' => "Bearer #{ENV.fetch('CBETA_API_KEY')}" })
不接受用 query string 傳 key(例如 ?api_key=…)。
query string 會被寫進伺服器的 access log、Rails log 與存取統計,
等於在多個地方留下 key 的明文。
| 額度 | |
|---|---|
| 沒帶 key | 每分鐘 60 次(依 IP 計算) |
| 帶有效的 key | 每分鐘 300 次(依帳號計算) |
額度是硬上限,超過會收到 429,並帶 Retry-After header
告知要等幾秒。請依照它退讓重試,不要持續重打。
下面的建議值則是為了保留安全餘裕。
除了上面的額度之外,伺服器還有一道依 IP 計算的防護:
短時間內集中送出大量 request,整個 IP 會被封鎖一段時間,
期間所有呼叫都會失敗,而且不會收到 429 提醒。
為了安全,建議把流量控制在以下範圍:
要注意的是:
429 的 request 仍然算在流量裡,收到後若繼續重打,最後還是會被封鎖。到 我的帳號 可以:
每個帳號同時最多可以有 2 把有效的 key。保留兩把是為了讓您能無縫更換: 先產生新的 → 把用到舊 key 的程式都改過來 → 再撤銷舊的,中間不會斷線。
cbeta_ 加上 32 bytes 的隨機值。| HTTP status | 意思 | 怎麼處理 |
|---|---|---|
| %code 401 | key 無效、已撤銷,或(過渡期結束後)沒帶 key | 檢查 header 拼寫,或到帳號頁確認 key 還有效 |
| %code 429 | 超過額度 | 依 Retry-After 等待後重試 |