From ce1f9ae72b4e12e56cd2c0223ea13ed54417170d Mon Sep 17 00:00:00 2001
From: jason810496 <810496@email.wlsh.tyc.edu.tw>
Date: Wed, 6 Dec 2023 16:29:19 +0800
Subject: [PATCH] Finish Day30 and Update Day01
---
Day01.md | 74 ++++++++++++++++++++++++++++++++
Day30.md | 128 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 202 insertions(+)
create mode 100644 Day30.md
diff --git a/Day01.md b/Day01.md
index 13e7979..4ae58c3 100644
--- a/Day01.md
+++ b/Day01.md
@@ -1,5 +1,79 @@
# [Day01] FastAPI 推坑與框架的朋友們
+## 本系列文章目錄
+
+在 30 天的鐵人賽,我們會完成了以下的內容
+
+### 基礎功能
+- FastAPI 基本用法 : 以 FastAPI 來實作基本 RESTful API
+- Databse Injections : 以 SQLAlchemy 作為 ORM 來操作資料庫
+- 以 Pytest 撰寫 Unit Test 和 Benchmark
+- 以 Docker + Docker Compose 來部署專案
+
+### 架構實作
+- OAuth2 + JWT 實作 : 以 OAuth2 + JWT 來實作登入機制
+- 以 Redis 作為 Server Side Cache : 實作 Key-Value Cache 和 Pagenation Cache
+- 實作 Primary Replica 架構 : 以 Read-Write Splitting 和 Read-Only Replica 來提升 Query 效能
+- 實作 Event Driven 架構 : 以 Celery + Redis 作為 Message Broker 來實作非同步任務
+- 實作 Rate Limit Middleware : 以 Redis 作為 Rate Limit 的資料儲存
+
+**在 Day01 ~ Day09 : 介紹 FastAPI 的基本用法**
+- [[Day01] FastAPI 推坑與框架的朋友們](https://ithelp.ithome.com.tw/articles/10320028)
+- [[Day02] FastAPI 啟動: 環境安裝](https://ithelp.ithome.com.tw/articles/10320376)
+- [[Day03] FastAPI 設定與 Uvicorn 包裝](https://ithelp.ithome.com.tw/articles/10320570)
+- [[Day04] FastAPI 基礎架構](https://ithelp.ithome.com.tw/articles/10322582)
+- [[Day05] FastAPI : Schema & Pydantic](https://ithelp.ithome.com.tw/articles/10322585)
+- [[Dat06] FastAPI : Response model](https://ithelp.ithome.com.tw/articles/10324121)
+- [[Day07] 再談 Python Typing 與 Schema 常見錯誤](https://ithelp.ithome.com.tw/articles/10324964)
+- [[Day08] 為 Swagger (OpenAPI) 加上更多資訊](https://ithelp.ithome.com.tw/articles/10325684)
+- [[Day09] 架構優化:依據項目切分 Router](https://ithelp.ithome.com.tw/articles/10326343)
+
+**在 Day10 ~ Day16 : 在 FastAPI 中使用 SQLAlchemy 和 Depends injection**
+- [[Day10] 連接 Database](https://ithelp.ithome.com.tw/articles/10326759)
+- [[Day11] SQLAlchemy Model](https://ithelp.ithome.com.tw/articles/10328525)
+- [[Day12] 使用 SQLalchemy](https://ithelp.ithome.com.tw/articles/10329028)
+- [[Day13] 架構優化: Depends 萬用刀 & 常見錯誤](https://ithelp.ithome.com.tw/articles/10329960)
+- [[Day14] 架構優化:將 CRUD 與 API endpoint 分離](https://ithelp.ithome.com.tw/articles/10331002)
+- [[Day15] 架構優化:非同步存取 DB](https://ithelp.ithome.com.tw/articles/10331531)
+- [[Day16] 架構優化:非同步存取 DB (2)](https://ithelp.ithome.com.tw/articles/10332377)
+
+**在 Day17 ~ Day20 : 實作 OAuth2 + JWT 登入機制**
+- [[Day17] OAuth2 實例: 密碼驗證](https://ithelp.ithome.com.tw/articles/10333002)
+- [[Day18] OAuth2 實例: OAuth2 Schema & JWT](https://ithelp.ithome.com.tw/articles/10333835)
+- [[Day19] OAuth2 實例:Authorize Dependency 、 權限管理](https://ithelp.ithome.com.tw/articles/10333926)
+- [[Day20] OAuth2 實例:實作總結](https://ithelp.ithome.com.tw/articles/10335041)
+
+**在 Day21 ~ Day23 : 以 Pytest 來撰寫 Unit Test 和 Docker Compose 來部署專案**
+- [[Day21] Pytest 入門與安裝](https://ithelp.ithome.com.tw/articles/10335690)
+- [[Day22] 測試: Pytest `paramaterize` 與功能驗證](https://ithelp.ithome.com.tw/articles/10336272)
+- [[Day23] 部署: 透過 Docker Compose 部署 FastAPI + PostgreSQL + MySQL](https://ithelp.ithome.com.tw/articles/10336829)
+
+**在 Day24 ~ Day26 : 以 Redis 實作 Server Side Cache**
+- [[Day24] 架構優化 : Redis Cache , `redis-py` 架構初探](https://ithelp.ithome.com.tw/articles/10337357)
+- [[Day25] 架構優化 : Redis 實作 Server Cache](https://ithelp.ithome.com.tw/articles/10337853)
+- [[Day26] 架構優化 : Redis Pagenation Cache 實作](https://ithelp.ithome.com.tw/articles/10338413)
+
+**在 Day27 ~ Day29 : 實作 Primary Replica 架構**
+- [[Day27] FastAPI : Primary Replica 架構實作](https://ithelp.ithome.com.tw/articles/10338649)
+- [[Day28] FastAPI : Primary Replica 架構實作 (2)](https://ithelp.ithome.com.tw/articles/10339203)
+- [[Day29] FastAPI : Refactoring & CROS 設定](https://ithelp.ithome.com.tw/articles/10339634)
+- [[Day30] FastAPI 系列:山重水複疑無路,柳暗花明又一村](https://ithelp.ithome.com.tw/articles/10340054)
+
+**在 Day31 ~ Day33 : Event Drive 與 Rate Limit 實作**
+> 來不及在 iThome 鐵人賽關版前寫完的文章
+> 都會放放在 [Github Repo](https://github.com/jason810496/iThome2023-FastAPI-Tutorial) 上,有興趣的可以自行閱讀 !
+- [[Day31]](https://github.com/jason810496/iThome2023-FastAPI-Tutorial/tree/Day31) : Event Driven 初探(1) 以 Redis 作為 Message Queue
+- [[Day32]](https://github.com/jason810496/iThome2023-FastAPI-Tutorial/tree/Day32) : Event Driven 初探(2) 以 Celery + Redis 作為可監控式 Message Broker
+- [[Day33]](https://github.com/jason810496/iThome2023-FastAPI-Tutorial/tree/Day33) 以 Redis 實作 Rate Limit Middleware
+
+
+
+希望這些內容可以幫助到大家!
+也歡迎大家提出建議和指教 🙌
+
+---
+> 以下是 Day1 正文!
+
FastAPI 是由 :
- [Starlette](https://www.starlette.io/)
- [Pydantic](https://docs.pydantic.dev/latest/)
diff --git a/Day30.md b/Day30.md
new file mode 100644
index 0000000..df92260
--- /dev/null
+++ b/Day30.md
@@ -0,0 +1,128 @@
+## [[Day30]](https://github.com/jason810496/iThome2023-FastAPI-Tutorial/tree/Day30) FastAPI 系列:山重水複疑無路,柳暗花明又一村
+
+
+## 來不及在 iThome 鐵人賽關版前寫完的文章
+
+都會放放在 [Github Repo](https://github.com/jason810496/iThome2023-FastAPI-Tutorial) 上,有興趣的可以自行閱讀 !
+- [[Day31]](https://github.com/jason810496/iThome2023-FastAPI-Tutorial/tree/Day31) : Event Driven 初探(1) 以 Redis 作為 Message Queue
+- [[Day32]](https://github.com/jason810496/iThome2023-FastAPI-Tutorial/tree/Day32) : Event Driven 初探(2) 以 Celery + Redis 作為可監控式 Message Broker
+- [[Day33]](https://github.com/jason810496/iThome2023-FastAPI-Tutorial/tree/Day32) 以 Redis 實作 Rate Limit Middleware
+
+## 回顧
+
+在 30 天的鐵人賽,我們完成了以下的內容
+### 基礎功能
+- FastAPI 基本用法 : 以 FastAPI 來實作基本 RESTful API
+- Databse Injections : 以 SQLAlchemy 作為 ORM 來操作資料庫
+- 以 Pytest 撰寫 Unit Test 和 Benchmark
+- 以 Docker + Docker Compose 來部署專案
+
+### 架構實作
+- OAuth2 + JWT 實作 : 以 OAuth2 + JWT 來實作登入機制
+- 以 Redis 作為 Server Side Cache : 實作 Key-Value Cache 和 Pagenation Cache
+- 實作 Primary Replica 架構 : 以 Read-Write Splitting 和 Read-Only Replica 來提升 Query 效能
+- 實作 Event Driven 架構 : 以 Celery + Redis 作為 Message Broker 來實作非同步任務
+- 實作 Rate Limit Middleware : 以 Redis 作為 Rate Limit 的資料儲存
+
+
+
+**在 Day01 ~ Day09 : 介紹 FastAPI 的基本用法**
+- [[Day01] FastAPI 推坑與框架的朋友們](https://ithelp.ithome.com.tw/articles/10320028)
+- [[Day02] FastAPI 啟動: 環境安裝](https://ithelp.ithome.com.tw/articles/10320376)
+- [[Day03] FastAPI 設定與 Uvicorn 包裝](https://ithelp.ithome.com.tw/articles/10320570)
+- [[Day04] FastAPI 基礎架構](https://ithelp.ithome.com.tw/articles/10322582)
+- [[Day05] FastAPI : Schema & Pydantic](https://ithelp.ithome.com.tw/articles/10322585)
+- [[Dat06] FastAPI : Response model](https://ithelp.ithome.com.tw/articles/10324121)
+- [[Day07] 再談 Python Typing 與 Schema 常見錯誤](https://ithelp.ithome.com.tw/articles/10324964)
+- [[Day08] 為 Swagger (OpenAPI) 加上更多資訊](https://ithelp.ithome.com.tw/articles/10325684)
+- [[Day09] 架構優化:依據項目切分 Router](https://ithelp.ithome.com.tw/articles/10326343)
+
+**在 Day10 ~ Day16 : 在 FastAPI 中使用 SQLAlchemy 和 Depends injection**
+- [[Day10] 連接 Database](https://ithelp.ithome.com.tw/articles/10326759)
+- [[Day11] SQLAlchemy Model](https://ithelp.ithome.com.tw/articles/10328525)
+- [[Day12] 使用 SQLalchemy](https://ithelp.ithome.com.tw/articles/10329028)
+- [[Day13] 架構優化: Depends 萬用刀 & 常見錯誤](https://ithelp.ithome.com.tw/articles/10329960)
+- [[Day14] 架構優化:將 CRUD 與 API endpoint 分離](https://ithelp.ithome.com.tw/articles/10331002)
+- [[Day15] 架構優化:非同步存取 DB](https://ithelp.ithome.com.tw/articles/10331531)
+- [[Day16] 架構優化:非同步存取 DB (2)](https://ithelp.ithome.com.tw/articles/10332377)
+
+**在 Day17 ~ Day20 : 實作 OAuth2 + JWT 登入機制**
+- [[Day17] OAuth2 實例: 密碼驗證](https://ithelp.ithome.com.tw/articles/10333002)
+- [[Day18] OAuth2 實例: OAuth2 Schema & JWT](https://ithelp.ithome.com.tw/articles/10333835)
+- [[Day19] OAuth2 實例:Authorize Dependency 、 權限管理](https://ithelp.ithome.com.tw/articles/10333926)
+- [[Day20] OAuth2 實例:實作總結](https://ithelp.ithome.com.tw/articles/10335041)
+
+**在 Day21 ~ Day23 : 以 Pytest 來撰寫 Unit Test 和 Docker Compose 來部署專案**
+- [[Day21] Pytest 入門與安裝](https://ithelp.ithome.com.tw/articles/10335690)
+- [[Day22] 測試: Pytest `paramaterize` 與功能驗證](https://ithelp.ithome.com.tw/articles/10336272)
+- [[Day23] 部署: 透過 Docker Compose 部署 FastAPI + PostgreSQL + MySQL](https://ithelp.ithome.com.tw/articles/10336829)
+
+**在 Day24 ~ Day26 : 以 Redis 實作 Server Side Cache**
+- [[Day24] 架構優化 : Redis Cache , `redis-py` 架構初探](https://ithelp.ithome.com.tw/articles/10337357)
+- [[Day25] 架構優化 : Redis 實作 Server Cache](https://ithelp.ithome.com.tw/articles/10337853)
+- [[Day26] 架構優化 : Redis Pagenation Cache 實作](https://ithelp.ithome.com.tw/articles/10338413)
+
+**在 Day27 ~ Day29 : 實作 Primary Replica 架構**
+- [[Day27] FastAPI : Primary Replica 架構實作](https://ithelp.ithome.com.tw/articles/10338649)
+- [[Day28] FastAPI : Primary Replica 架構實作 (2)](https://ithelp.ithome.com.tw/articles/10339203)
+- [[Day29] FastAPI : Refactoring & CROS 設定](https://ithelp.ithome.com.tw/articles/10339634)
+- [[Day30] FastAPI 系列:山重水複疑無路,柳暗花明又一村](https://ithelp.ithome.com.tw/articles/10340054)
+
+**在 Day31 ~ Day33 : Event Drive 與 Rate Limit 實作**
+> 來不及在 iThome 鐵人賽關版前寫完的文章
+> 都會放放在 [Github Repo](https://github.com/jason810496/iThome2023-FastAPI-Tutorial) 上,有興趣的可以自行閱讀 !
+- [[Day31]](https://github.com/jason810496/iThome2023-FastAPI-Tutorial/tree/Day31) : Event Driven 初探(1) 以 Redis 作為 Message Queue
+- [[Day32]](https://github.com/jason810496/iThome2023-FastAPI-Tutorial/tree/Day32) : Event Driven 初探(2) 以 Celery + Redis 作為可監控式 Message Broker
+- [[Day33]](https://github.com/jason810496/iThome2023-FastAPI-Tutorial/tree/Day33) 以 Redis 實作 Rate Limit Middleware
+
+
+## 總結
+
+原本是 10/16 就會結束的鐵人賽
+其實到今天 ( 12/06 ) 才正式寫完 TAT
+
+
+
+在開賽前,我其實只有囤不到 10 篇的文章
+接下來都是盡可能一天生一篇
+> 但是每篇包含 code 大概都落在 3000~5000 字
+> 還有在新功能實作時,多少會遇到一些 bugs
+> 後期的文章都只能拿以前的文章先貼上去
+
+
+
+還有在最後 5 篇文章時,想不太到也寫什麼 ( 之前規劃的內容都寫完了 )
+也花了快一兩週來看其他文章、學新技術、找主題
+
+
+
+在實作也遇到蠻多出乎意料的問題
+- 在處理 async genrator 時:發現需要透過 `asynccontextmanager` 才能正確的 yield 出 `AsyncSession`
+- 以 Redis 實作 Pagenaion Cache 時:發現後端再處理資料合併時效率太低,用其他寫法才達到預期的效果
+- 實作 Primary Replica 架構時:發現以 `random.choice` 來選擇 Replica 會倒致效率低落,改用以 bitwise 實現 `round-robin` 才達到預期的效果
+
+
+
+像是在處理 Pagenaion Cache 和 Primary Replica 架構問題時
+都分別花 3 天到 1 週才通靈出關鍵點
+
+
+
+
+在這兩個月的時間
+除了正式完成 iThome 鐵人賽
+也在 10 月打 [**NCPC 決賽**](https://ncpc.ntnu.edu.tw/)、[**ICPC 桃園站**](https://icpc.global/regionals/finder/Taipei) 和 [**ITSA 決賽**](https://www.itsa.org.tw/itsacontest/2023/register/index.php)
+11 月 在 [**MOPCON 講議程**](https://mopcon.org/2023/schedule/)、參加 [**臺北程式節黑客松**](https://codefest.taipei/) 和 **聽 Coldplay演唱會**
+是個非常充實的兩個月!
+
+
+## About Me
+
+我是劉哲佑
+目前就讀成大資工大二
+目前往 Fullstack 偏 Backend + DevOps 的方向發展 !
+
+
+[![Facebook](https://img.shields.io/static/v1?style=for-the-badge&message=Facebook&color=1877F2&logo=Facebook&logoColor=FFFFFF&label=)](https://www.facebook.com/JasonBigCow)
+[![LinkedIn](https://img.shields.io/static/v1?style=for-the-badge&message=LinkedIn&color=0A66C2&logo=LinkedIn&logoColor=FFFFFF&label=)](https://www.linkedin.com/in/zhe-you-liu/)
+[![Gmail](https://img.shields.io/static/v1?style=for-the-badge&message=Gmail&color=EA4335&logo=Gmail&logoColor=FFFFFF&label=)](mailto:f74116720@gs.ncku.edu.tw)
\ No newline at end of file