核心概念
最後更新
HakoRun 以「路徑」識別函式、以時間戳區分版本,並提供已儲存與即時兩種執行方式。
函式路徑
- 每個函式以上傳時的
path字串識別(例:math/add),呼叫時對應/run/<path>。 path含..時上傳被拒(HTTP 400)。- 儲存 key 取
path的 MD5,不直接使用原字串,見 儲存後端。 - 同一路徑重新上傳時,語言以最後一次上傳為準。
版本
| 行為 | 說明 |
|---|---|
| 版本號 | 上傳當下的 Unix 秒數,/upload 回應的 version |
| 預設執行 | /run/<path> 不帶 version 時執行最新版本 |
| 釘選版本 | /run/<path>?version=<timestamp>;版本不存在回 404 |
非整數 version |
視為未指定,執行最新版本 |
| 同秒上傳 | 同一路徑一秒內上傳兩次會得到相同版本號,後者覆蓋前者的程式碼 |
已儲存執行與即時執行
| 模式 | 端點 | 程式碼來源 | 語言檢查 |
|---|---|---|---|
| 已儲存執行 | POST /run/*path |
儲存後端(body 的 code/language 會被覆蓋) |
上傳時檢查 |
| 即時執行 | POST /run-now |
請求 body,不寫入儲存 | 每次請求檢查;code 不可為空白 |
兩種模式取得程式碼後走同一條執行路徑:
graph LR
Body[getRunBody 限制 CODE_MAX_SIZE] --> Run[run]
Run -->|stream=false| Once[runScript]
Run -->|stream=true| SSE[runScriptWithSSE]
Once --> Cmd[sandbox.SandboxCommand]
SSE --> Cmd
Cmd --> Wrapper[wrapper 讀 stdin]
執行生命週期
- 每次請求都啟動新的沙箱子行程,執行完即結束,不共用狀態。
- 截止時間為
TIMEOUT_SCRIPT加 5 秒;逾時即終止行程。 - 非串流模式在行程結束後一次回傳;串流模式邊執行邊推送,細節見 回應與 SSE。