架構
本頁以一張概覽圖說明 go-rest-client 的分層與跨層原則;模組內部、序列圖與狀態機見 doc/architecture.zh.md。
系統概覽
graph TB
CLI[cmd/tui 進入點] -->|檔案路徑| P[internal/parser]
CLI -->|建立| T[internal/ui TUI]
CLI -->|建立| W[fsnotify Watcher]
F[.http 檔案] --> P
W -->|Write / Create 事件| P
P -->|Requests| T
T -->|Enter| H[net/http Client]
H -->|一般回應| R[handleResponse]
H -->|text/event-stream| S[handleSSEResponse]
R --> V[資訊面板]
S --> V
分層
| 層 | 路徑 | 職責 |
|---|---|---|
| 進入點 | cmd/tui/main.go |
驗證參數、建立 Watcher 與 TUI、首次解析、啟動事件迴圈 |
| 解析 | internal/parser/parser.go |
.http 逐行解析、Header 名稱驗證、檔案監控與重載 |
| 介面與傳輸 | internal/ui/tui.go |
tview 版面、按鍵綁定、送出 HTTP 請求、渲染一般與 SSE 回應 |
兩個 package 皆位於 internal/,無法被其他 module import;parser 依賴 ui 的 TUI 與 Request 型別,ui 不依賴 parser。
跨層原則
| 原則 | 實作 |
|---|---|
| UI 只在事件迴圈內更新 | 背景 goroutine 一律透過 App.QueueUpdateDraw 修改畫面 |
| 請求清單有鎖保護 | TUI.Requests 以 sync.RWMutex(TUI.Mu)保護,重載寫入與送出讀取不互相干擾 |
| 送出不阻塞介面 | 每次 Enter 在獨立 goroutine 執行,帶 120 秒 context 逾時 |
| 重載去抖動 | 200ms 計時器合併連續寫入事件,計時器本身以 mutex 保護 |