3.2 KiB
3.2 KiB
API Contract Master
目標
固定 v1 對外契約,避免前後端與 SDK 在開發中漂移。
參數必填/可選與路由實際狀態,請優先看: PYTHON_API_PARAMETER_GUIDE.md
這輪契約調整(2026-03-22)
experiment_key改為系統生成(EX+timestamp),不接受使用者輸入。variant_key改為系統生成(VA+timestamp),不接受使用者輸入。- Variant 不再暴露
status、is_control作為使用者可編輯欄位。 variant_changes移除enabled欄位(每筆 change 預設啟用)。- 建立 Experiment API 成功時,需同步建立一個原始版本 Variant(系統管理)。
- Runtime 實驗匹配需基於 URL 規則與裝置限制。
- Release rollback 僅允許針對
published版本,且操作後需維持「每個 experiment 僅一個 published」。
分區
- Admin API
- Editor API
- Runtime API
Admin API(v1)
Sites
GET /api/admin/sitesGET /api/admin/sites/{site_id}
Experiments
GET /api/admin/experimentsGET /api/admin/experiments/{experiment_id}POST /api/admin/experimentsPATCH /api/admin/experiments/{experiment_id}GET /api/admin/experiments/{experiment_id}/activity
POST/PATCH /api/admin/experiments 使用者輸入重點:
namemodule_typestatustargeting_config.url_rulestargeting_config.device_targets
使用者不輸入:
experiment_key(系統生成)
Variants
GET /api/admin/variants/{variant_id}GET /api/admin/variants?experiment_id=...POST /api/admin/variantsPATCH /api/admin/variants/{variant_id}
POST/PATCH /api/admin/variants 使用者輸入重點:
nametraffic_weight
使用者不輸入:
variant_key(系統生成)statusis_control
Releases
GET /api/admin/releases?experiment_id=...GET /api/admin/releases/{release_id}POST /api/admin/releases/buildPOST /api/admin/releases/{release_id}/publishPOST /api/admin/releases/{release_id}/rollbackPOST /api/admin/releases/{release_id}/archive
Goals / SDK Config
GET /api/admin/goalsGET /api/admin/goals/{goal_id}GET /api/admin/sdk-configsGET /api/admin/sdk-configs/{sdk_config_id}
Editor API(v1)
POST /api/editor/sessionsGET /api/editor/sessions/{session_id}PATCH /api/editor/sessions/{session_id}DELETE /api/editor/sessions/{session_id}GET /api/editor/variants/{variant_id}/changesPUT /api/editor/variants/{variant_id}/changesPOST /api/editor/previews/build
PUT /api/editor/variants/{variant_id}/changes:
- change 欄位不含
enabled - change 是否生效由是否存在於 change set 決定
Runtime API(v1)
POST /api/runtime/bootstrapPOST /api/runtime/assignPOST /api/runtime/payloadPOST /api/runtime/events/impressionPOST /api/runtime/events/conversion
契約原則
- 所有 API 回傳統一 DTO,不回傳 Directus raw item
- editor 專用 DTO 與 runtime 專用 DTO 分離
- breaking change 需升 API 版本
- 對外
C/U/D一律經 FastAPI,禁止 frontend 直接對 Directus 做新業務寫入