[Day30] FastAPI 系列:山重水複疑無路,柳暗花明又一村
都會放放在 Github Repo 上,有興趣的可以自行閱讀 !
- [Day31] : Event Driven 初探(1) 以 Redis 作為 Message Queue
- [Day32] : Event Driven 初探(2) 以 Celery + Redis 作為可監控式 Message Broker
- [Day33] 以 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 推坑與框架的朋友們
- [Day02] FastAPI 啟動: 環境安裝
- [Day03] FastAPI 設定與 Uvicorn 包裝
- [Day04] FastAPI 基礎架構
- [Day05] FastAPI : Schema & Pydantic
- [Dat06] FastAPI : Response model
- [Day07] 再談 Python Typing 與 Schema 常見錯誤
- [Day08] 為 Swagger (OpenAPI) 加上更多資訊
- [Day09] 架構優化:依據項目切分 Router
在 Day10 ~ Day16 : 在 FastAPI 中使用 SQLAlchemy 和 Depends injection
- [Day10] 連接 Database
- [Day11] SQLAlchemy Model
- [Day12] 使用 SQLalchemy
- [Day13] 架構優化: Depends 萬用刀 & 常見錯誤
- [Day14] 架構優化:將 CRUD 與 API endpoint 分離
- [Day15] 架構優化:非同步存取 DB
- [Day16] 架構優化:非同步存取 DB (2)
在 Day17 ~ Day20 : 實作 OAuth2 + JWT 登入機制
- [Day17] OAuth2 實例: 密碼驗證
- [Day18] OAuth2 實例: OAuth2 Schema & JWT
- [Day19] OAuth2 實例:Authorize Dependency 、 權限管理
- [Day20] OAuth2 實例:實作總結
在 Day21 ~ Day23 : 以 Pytest 來撰寫 Unit Test 和 Docker Compose 來部署專案
- [Day21] Pytest 入門與安裝
- [Day22] 測試: Pytest
paramaterize
與功能驗證 - [Day23] 部署: 透過 Docker Compose 部署 FastAPI + PostgreSQL + MySQL
在 Day24 ~ Day26 : 以 Redis 實作 Server Side Cache
- [Day24] 架構優化 : Redis Cache ,
redis-py
架構初探 - [Day25] 架構優化 : Redis 實作 Server Cache
- [Day26] 架構優化 : Redis Pagenation Cache 實作
在 Day27 ~ Day29 : 實作 Primary Replica 架構
- [Day27] FastAPI : Primary Replica 架構實作
- [Day28] FastAPI : Primary Replica 架構實作 (2)
- [Day29] FastAPI : Refactoring & CROS 設定
- [Day30] FastAPI 系列:山重水複疑無路,柳暗花明又一村
在 Day31 ~ Day33 : Event Drive 與 Rate Limit 實作
來不及在 iThome 鐵人賽關版前寫完的文章
都會放放在 Github Repo 上,有興趣的可以自行閱讀 !
- [Day31] : Event Driven 初探(1) 以 Redis 作為 Message Queue
- [Day32] : Event Driven 初探(2) 以 Celery + Redis 作為可監控式 Message Broker
- [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 決賽、ICPC 桃園站 和 ITSA 決賽
11 月 在 MOPCON 講議程、參加 臺北程式節黑客松 和 聽 Coldplay演唱會
是個非常充實的兩個月!
我是劉哲佑
目前就讀成大資工大二
目前往 Fullstack 偏 Backend + DevOps 的方向發展 !