快速回顧學到的內容
- 安裝與工具
- rustup、cargo、cargo new / build / run / fmt。
- Rust 基礎語法
- 變數、型別、條件(if 作為表達式)、match、迴圈(loop / while / for)。
- 函數(fn)、結構(struct)、列舉(enum)、模組(mod)。
- 所有權與借用(Ownership & Borrowing)
- 移動(move)、不可變借用
&T
、可變借用 &mut T
、clone、Copy。
- 生命週期(lifetimes)與參考有效性保證。
- 錯誤處理
- Option、Result、? 運算子、錯誤傳遞與處理實務。
- 常用資料結構與 iterator
- Vec、HashMap、iter/map/filter/collect。
- CLI 開發實戰
- 使用 clap 建造待辦管理器(todo CLI),檔案儲存(serde_json)、日期時間(chrono)、顏色輸出(colored)。
- Web 與 Axum 生態
- Axum 基礎:Router、Handler、Server。
- Path/Query/Form/Headers/自訂 Extractors。
- 中間件(tower & tower-http):CORS、Compression、Timeout、Trace。
- State 管理:with_state / Extension,與 Arc、tokio::sync::RwLock。
- 中間件與架構
- 自訂 Layer/Service、ResponseTime middleware、Trace/logging(tracing)。
- 快取、Redis 與一致性模式
- cache-aside、TTL、invalidate、負快取與一致性權衡。
- 資料庫與 sqlx
- PgPool、連線池設定、migrations(sqlx-cli)、在啟動時執行 migration、使用 parameterized SQL。
- 使用者安全(密碼與驗證)
- Argon2 雜湊(spawn_blocking)、hash 與 verify、參數選擇、rehash 策略。
- JWT(jsonwebtoken):簽發、驗證、自訂 extractor 做授權保護。
- 授權(Authorization):Owner check、防 TOCTOU 的 SQL 寫法。
- 測試(單元 + 整合)
- 把 app 組成可測試的 factory、用 reqwest 與真實 DB/Redis 做 integration tests。
- 部署、容器化與 CI
- Docker multi-stage build(靜態二進位)、docker-compose(Postgres/Redis/API)、GitHub Actions CI 範例。
- 性能測試
- k6 範例腳本、透過 stages/thresholds 測 p95、模擬真實行為。
實戰重點
- 開發流程
- 把 schema migration(migrations/)納入版本控制、並在 CI 或部署腳本執行 migrations(避免多實例同時跑時的競態)。
- 安全
- JWT_SECRET 不要放在程式碼或 repository,中小型專案可用 env;生產環境建議用 KMS / secret manager。
- 密碼處理只存 hashed string(Argon2 encoded form),絕對不回傳 password_hash 給 client。
- 快取策略
- 對於讀多寫少的資源(如熱門 user profile),cache-aside 加 TTL 效果最佳。更新/刪除時務必 invalidate 或更新快取。
- 錯誤處理
- 為每種類型錯誤定義合適 HTTP status(validation -> 400、auth -> 401/403、not found -> 404、conflict -> 409、internal -> 500),回傳 machine-friendly code。
- 測試與 CI
- 在 GitHub Actions 用 services 啟 Postgres/Redis 做 integration tests,並把測試 DB 以 UUID 隔離,確保可重複執行。
- 部署
- Dockerfile 用多階段建置(release binary),runtime image 不要含 build tool,並用 healthcheck 與 resource limit 管控。
- 觀測與追蹤
- 在 production 用 TraceLayer + tracing 對接 log aggregator(Loki、ELK、Datadog)與 metrics(Prometheus)以便 observability。
- 性能
- 先做基準測試,再逐步增加負載到壓力測試(找 p95)、最後做耐力測試(找 memory leak 或資源累積問題)。
下一步可以做什麼?
- 把目前 todo / user 專案整理成 modular crate(拆 handlers、models、db、auth、cache),並補上 README 與 run 指令。
- 在 CI 加上 build artifact(docker image build + push 到 registry)的 job,並把 migration 放在 deploy 階段由 pipeline 執行。
- 實作 refresh token 流程(短期 access + long-lived refresh token 存 DB/Redis),加上 logout/撤銷流程。
- 加入 Prometheus metrics endpoint(/metrics)與基本 dashboard,並用 k6 定期做壓力測試。
- 加強安全檢查:static analysis、cargo-audit、依賴更新自動化(dependabot)。
- 擴充 API 文件:完善 utoipa/OpenAPI 的 examples,並在 dev/staging 環境開放 Swagger UI(生產環境需保護)。
心得
過去三十天,我們把 Rust 從語法、記憶體安全、到實務後端工程(CLI、Axum、sqlx、Redis、Auth、測試、部署、CI/CD、效能測試)串成一條可實作的路徑。我們已經把理論與大量實務樣板寫出來,未來可以把這些樣板整合成可持續維護的工程專案:自動化測試、監控、以及安全部署流程,會讓專案更穩健、能在真實環境長期運作。