iT邦幫忙

2025 iThome 鐵人賽

DAY 19
0
Rust

大家一起跟Rust當好朋友吧!系列 第 19

Day 19: 開始規劃我的個人部落格後端

  • 分享至 

  • xImage
  •  

嗨嗨!大家好!歡迎來到 Rust 三十天挑戰的第十九天!

經過前十八天的紮實學習,我們已經掌握了 Rust 的基礎語法、核心概念、以及現代開發技術。現在是時候將所學知識融會貫通,開始我們的最終專案!

今天我們要規劃一個個人部落格後端 API——這不是給千萬用戶使用的大型系統,而是專為你自己量身打造的寫作平台。讓我們用個人創作者的角度來思考這個專案。


🎯 個人部落格的核心需求

作為一個個人創作者,我需要什麼?

寫作體驗

  • 📝 快速發布文章,支援 Markdown
  • 🏷️ 用標籤整理我的想法和主題
  • 📚 管理草稿和已發布的內容
  • 🔍 能輕鬆找到過去寫過的文章

讀者體驗

  • 🌐 快速載入文章內容
  • 💬 留言與我互動(但我要能管理)
  • 📖 按標籤或時間瀏覽我的文章
  • 📱 在各種裝置上都能流暢閱讀

管理需求

  • 🛡️ 只有我能發布文章和管理內容
  • 📊 了解哪些文章最受歡迎
  • 🚨 垃圾留言要能被過濾
  • 🔧 系統要穩定可靠,不能時常當機

🏗️ 簡化的架構設計

個人部落格不需要複雜的用戶系統,讓我們專注於核心功能:

核心實體

文章 (Post)
├── 標題、內容、摘要
├── 發布狀態(草稿/發布)
├── 建立和更新時間
├── 瀏覽次數
└── 關聯的標籤

標籤 (Tag)
├── 名稱和描述
├── 文章計數
└── 顏色標記(前端顯示用)

留言 (Comment)
├── 留言者資訊(名稱、信箱)
├── 留言內容
├── 審核狀態
└── 所屬文章

為什麼這樣設計?

  • 單一作者:不需要複雜的用戶管理系統
  • 簡單權限:只區分「管理員(我)」和「訪客」
  • 專注寫作:核心功能圍繞內容創作
  • 易於維護:結構簡單,問題好排查

🌐 API 端點規劃

公開端點(給讀者使用)

GET  /api/posts           # 文章列表,支援分頁和標籤篩選
GET  /api/posts/:id       # 單一文章詳情
GET  /api/tags            # 標籤列表
GET  /api/tags/:name/posts # 特定標籤的文章

POST /api/posts/:id/comments # 新增留言
GET  /api/posts/:id/comments # 文章的留言列表

GET  /api/health          # 系統健康檢查

管理端點(需要認證)

POST   /api/admin/posts         # 建立新文章
PUT    /api/admin/posts/:id     # 更新文章
DELETE /api/admin/posts/:id     # 刪除文章

POST   /api/admin/tags          # 建立標籤
PUT    /api/admin/tags/:id      # 更新標籤
DELETE /api/admin/tags/:id      # 刪除標籤

PUT    /api/admin/comments/:id/approve  # 審核留言
DELETE /api/admin/comments/:id          # 刪除留言

GET    /api/admin/stats         # 統計資訊

💭 個人化的設計考量

內容創作流程

1. 寫草稿 → 儲存為 Draft
2. 預覽效果 → 前端渲染 Markdown
3. 發布文章 → 狀態改為 Published
4. 讀者互動 → 留言需要我審核
5. 內容維護 → 隨時可以編輯或隱藏

標籤管理策略

寫作時標籤:
- 可以建立新標籤
- 自動建議相似標籤
- 支援標籤的顏色分類

讀者瀏覽標籤:
- 依文章數量排序
- 顯示每個標籤的文章數
- 標籤頁面列出相關文章

留言管理機制

留言發布流程:
1. 讀者填寫名稱、信箱、內容
2. 系統記錄 IP 和時間
3. 簡單的垃圾檢測
4. 進入待審核狀態
5. 我審核後才顯示

🔧 技術選擇的考量

為什麼用 Rust?

  • 效能:個人 VPS 資源有限,需要高效率
  • 安全:不用擔心記憶體洩漏和安全漏洞
  • 穩定:一旦部署就能長時間穩定運行
  • 學習:這是我們的學習目標 😊

資料庫選擇

  • PostgreSQL:功能強大,支援全文搜尋
  • SQLite:如果想要更簡單的部署
  • 考慮因素:個人部落格的資料量不會太大

部署考量

個人部署的現實:
- 可能只有一台小 VPS
- 需要容易備份和遷移
- 希望能自動化部署
- 成本要可控

📱 前端整合考量

雖然我們只做後端,但要考慮前端的需求:

API 回應格式

{
  "success": true,
  "data": {
    "post": {
      "id": 1,
      "title": "我的第一篇 Rust 文章",
      "content": "# Rust 真是太棒了...",
      "excerpt": "今天開始學習 Rust...",
      "published_at": "2025-01-15T10:30:00Z",
      "view_count": 42,
      "tags": [
        {"name": "rust", "color": "#8B5CF6"},
        {"name": "programming", "color": "#10B981"}
      ]
    }
  }
}

前端友善的設計

  • 統一的錯誤格式:前端容易處理
  • 適當的 HTTP 狀態碼:語意清晰
  • CORS 支援:讓前端可以呼叫
  • 分頁資訊完整:方便實作分頁 UI

📊 MVP 功能優先級

第一版必須有的(接下來 11 天)

  1. 文章 CRUD:能發布、編輯、刪除文章
  2. 標籤系統:文章分類和整理
  3. 留言功能:讀者互動機制
  4. 基本認證:保護管理功能

第二版可以加的(未來擴展)

  • 文章搜尋:全文搜尋功能
  • 統計分析:瀏覽量、熱門文章
  • RSS 輸出:讓讀者訂閱
  • 圖片上傳:豐富文章內容
  • 文章排程:定時發布

第三版的想像(長期目標)

  • 多媒體支援:影片、音訊嵌入
  • 文章系列:相關文章的組織
  • 讀者訂閱:郵件通知新文章
  • 社群整合:分享到社交平台

🎨 個人風格的體現

內容管理哲學

個人部落格的特色:
- 不追求大量內容,追求品質
- 反映個人的思考和成長過程
- 可能有各種主題的文章
- 希望與讀者建立真誠的連結

技術實作理念

簡單而不簡陋:
- 功能精簡但完整
- 程式碼清晰易維護
- 效能優秀但不過度優化
- 安全可靠但不複雜

📅 開發計畫

這週完成(Day 19-21)

  • 今天:需求分析和架構規劃
  • 明天:選擇 Web 框架和工具
  • 後天:回顧整合,準備實作

下週實戰(Day 22-28)

  • Day 22-23:專案初始化和資料庫設計
  • Day 24-25:文章 CRUD 功能
  • Day 26-27:標籤和留言系統
  • Day 28:分頁和錯誤處理

最後衝刺(Day 29-30)

  • Day 29:認證和安全機制
  • Day 30:部署和總結

🤔 個人思考時間

問問自己

  1. 我想寫什麼樣的內容?

    • 技術文章?生活感想?還是兩者都有?
  2. 我希望讀者如何與我互動?

    • 允許匿名留言?還是需要註冊?
  3. 我的寫作習慣是什麼?

    • 喜歡先寫草稿再發布?還是直接發布?
  4. 我對部落格的長期規劃?

    • 純粹個人記錄?還是希望建立讀者社群?

設計決策記錄

基於個人需求的決策:

  • 決策 1:不需要用戶註冊系統 → 簡化架構
  • 決策 2:留言需要審核 → 確保內容品質
  • 決策 3:支援草稿功能 → 符合寫作習慣
  • 決策 4:標籤可以自由創建 → 靈活分類

🚀 今天的收穫

今天我們為個人部落格做了貼心的規劃:

需求理解

  • ✅ 釐清了個人部落格和企業系統的差異
  • ✅ 從創作者和讀者角度分析需求
  • ✅ 確定了簡化但完整的功能範圍

架構設計

  • ✅ 設計了符合個人使用的資料模型
  • ✅ 規劃了清晰的 API 端點結構
  • ✅ 考慮了前端整合的需求

個人化考量

  • ✅ 反映了個人創作的特色和需求
  • ✅ 平衡了功能豐富性和維護簡便性
  • ✅ 設定了實際可達成的開發目標

技術準備

  • ✅ 明確了技術選擇的理由
  • ✅ 制定了循序漸進的開發計畫
  • ✅ 預想了未來擴展的可能性

明天預告

明天我們將進入 Day 20:選擇你的 Web 框架:Actix Web vs. Axum

我們會實際比較這兩個框架對於個人部落格專案的適用性:

  • 📈 哪個更適合小型專案?
  • 🎯 學習成本和開發效率如何?
  • 🔧 對個人開發者的友善度?
  • 🌱 生態系統的支援程度?

然後選擇最適合我們的框架,並建立第一個 "Hello, Personal Blog!" 服務!


💭 今日思考題
想想你理想中的個人部落格應該是什麼樣子?

  • 你最希望它有什麼功能?
  • 你最擔心什麼技術難點?
  • 你希望讀者在你的部落格有什麼樣的體驗?

準備好開始打造屬於你自己的個人部落格了嗎?從明天開始,我們就要動手實現這個專屬於你的創作平台了!

我們明天見!!


上一篇
Day 18: 模組系統 (Module System):整理你的專案
系列文
大家一起跟Rust當好朋友吧!19
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言