代理設定管理後台
| slug | 目標網址 | method | 啟用 | 備註 |
|---|
全域白名單。子網域會自動放行(例 peteryang.me 也允許 od.peteryang.me)。* = 全部放行。
| 名稱 | 對象 | cron | 通知 | 啟用 | 最後執行 |
|---|
此處只控制「健康巡檢」的通知;排程任務各自的通知設定、以及「測試通知」按鈕不受影響。
呼叫者(GET 或 POST 都可) │ ▼ https://switchapi.peteryang.me/<slug> ←(別名 switchapi.000.taipei) │ 查 D1 設定 → 依「method 欄位」決定用 GET 或 POST 打來源 ▼ 來源 API ──→ 依 source_format 解碼/轉換 ──→ 回傳給呼叫者
method,兩者脫鉤。passthrough_query 開啟時轉傳。| 欄位 | 必填 | 說明 |
|---|---|---|
slug | 必填 | 路徑識別碼,小寫英數與 -。呼叫網址即 /slug |
target_url | 必填 | 來源完整網址(可含固定 query,如 api_key) |
method | - | 打來源用的方法:GET(預設)/POST/PUT/PATCH/DELETE/HEAD。POST/PUT/PATCH 會依 body_format 帶 body;其餘把 params 拼進 query。PUT/PATCH/DELETE 會改資料,不做自動健康巡檢(手動測試仍可) |
params | - | 固定參數(JSON 物件)。GET → 拼進 query;POST → 當 body 欄位 |
passthrough_query | - | 開啟後,呼叫者網址上的 query 也轉傳給來源(同名時 params 優先) |
body_format | - | POST/PUT/PATCH 的 body 型態:json(預設)/form(表單 urlencoded)/raw(用 body 欄位原文) |
body | - | body_format=raw 時送出的原始字串 |
request_headers | - | 送給來源的自訂 headers(JSON 物件),會覆蓋自動帶的 Content-Type |
timeout | - | 等待來源的上限(毫秒),超時回 504。空 = 不限 |
source_format | - | 來源格式:json/csv(自動轉 JSON)/binary(PDF、圖片等,不做文字處理) |
output_format | - | 輸出:json/xml/留空 = 原格式透傳(僅統一轉 UTF-8) |
encoding | - | 來源編碼:utf-8(預設)/big5(舊政府資料亂碼時選這個)/null(binary 用) |
csv_delimiter | - | CSV 分隔符,預設 ,;Tab 分隔填 \t |
json_path | - | 只取資料中某路徑,例 result.records 或 data[0].items |
fields | - | 欄位瘦身:字串陣列白名單,例 ["行政區","地址","經度","緯度"],只輸出列出的欄位。政府 CSV 動輒二三十欄、地圖只要四五欄,體積可縮 70% 以上。需 output_format 為 json/xml;資料包在深層時先用 json_path 指到陣列 |
xml_root / xml_item | - | 輸出 XML 時的根元素/陣列子項名稱 |
filename | - | 設定後強制瀏覽器下載(Content-Disposition),常配 binary |
mock_response | - | Mock 模式:有值就直接回傳這段內容、完全不打來源(回應帶 X-Mock: true)。此時 target_url 可留空、不做健康巡檢。搭配 mock_content_type(預設 application/json) |
browser_cache_ttl | - | 瀏覽器快取秒數。0 = 不快取(每次都來要) |
edge_cache_ttl | - | Cloudflare 節點快取秒數,所有人共享、大幅減少打來源。0 = 關 |
stale_ttl | - | 來源掛掉時「備胎資料」可頂替的秒數。0 = 關。即時資料務必設 0 |
cors_origin | - | 此筆額外允許的來源:*(完全公開)/單一網域/JSON 陣列 |
enabled | - | 停用時回 404,如同不存在 |
note | - | 備註,不影響邏輯 |
| 資料性質 | browser / edge | stale_ttl | 例子 |
|---|---|---|---|
| 幾乎不變(設施、位置) | 3600~86400 | 604800(7 天) | 公園設施、監視器 |
| 定期更新 | 600~3600 | 86400(1 天) | 公廁、垃圾車路線 |
| 即時 | 0(都關) | 0(必關) | 水位、GPS、座位、急診 |
stale = 來源掛掉時回傳上次成功的舊資料(帶 X-Stale: true)。即時資料給舊值會誤導,所以必關。
peteryang.me),子網域自動放行(od.peteryang.me 也會過)。填 * = 全部放行。cors_origin 是額外加開,不影響其他資料集。target_url: https://data.taipei/api/dataset/…/download source_format: csv ← 來源是 CSV output_format: json ← 轉成 JSON 給前端 encoding: big5 ← 中文變亂碼就是選這個 browser/edge: 600 / 600
target_url: https://info.nhi.gov.tw/api/…/SQL0002
method: POST
body_format: raw
body: {"AREA_NO":"","CONT_TYPE":""}
request_headers: {"Content-Type":"application/json","User-Agent":"Mozilla/5.0"}
快取全 0(即時資料)
前端仍用普通 GET 呼叫 /nhi-er 即可 —— worker 會替你轉成 POST。
method: POST
body_format: form ← 自動 urlencode + 正確 Content-Type
params: {"city":"taipei","type":"1"} ← 表單欄位放這裡
slug: demo-mock
mock_response: {"status":"ok","items":[{"name":"測試站點","lat":25.03,"lng":121.51}]}
target_url: (留空即可)
呼叫 /demo-mock 永遠回這段 JSON,來源還沒好、想先接前端時很好用。
target_url: https://example.com/report.pdf source_format: binary encoding: null filename: report.pdf ← 有填會直接觸發下載,不填則瀏覽器自行預覽 browser/edge: 86400 / 86400
*/30 * * * * 每 30 分|0 8 * * * 每天 08:00|0 9 * * 1 每週一 09:00|0 */6 * * * 每 6 小時snapshot_slug 後,
/snapshot/<snapshot_slug>/latest 回最新一筆成功結果、
/snapshot/<snapshot_slug>/history?limit=50 回最近 N 筆(含時間、狀態、內容)。
受同一套 CORS 白名單保護。搭配即時資料排程即可累積歷史數據(例:每小時存一次水位 → 畫歷史曲線)。switchapi.peteryang.me 或 switchapi.000.taipei 網址。*/30 * * * * 每 30 分|0 8 * * * 每天 08:00|0 9 * * 1 每週一 09:00|0 */6 * * * 每 6 小時排程不在匯入範圍內,不受影響。