在 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
希望這些內容可以幫助到大家!
也歡迎大家提出建議和指教 🙌
以下是 Day1 正文!
FastAPI 是由 :
這兩個框架作為基礎搭建的
- 在 web framework benchmark 中查詢這三個框架的比較,可見 FastAPI 比 django / flask 快上約 5 ~ 10 倍
並且 FastAPI 支援 async
function
@app.get("/async")
async def async_hello_world():
return "Hello World"
@app.get("/sync")
def sync_hello_world():
return "Hello World"
跑起 FastAPI 後,可以在 http://localhost:port/docs
看到 Swagger UI
在開發初期測試時非常方便!
如果喜歡 TypeScript
那一定也會喜歡 FastAPI
在
- API endpoint 的輸入參數或輸出參數
- endpoint 與 CRUD 之間的傳遞
都可以透過 Schema
作為型別檢查的基礎
而 Schema
就是由 Pydantic
所提供的 BaseModel
繼承而來
如下面的例子:
from datetime import datetime
from pydantic import BaseModel
class UserBase(BaseModel):
id: int
name: str
country: str
age: int
class UserCreate(UserBase):
address: str
birthday: datetime
password: str
class UserPubic(UserBase):
pass
class UserPricate(UserBase):
address: str
birthday: datetime
password: str
讓我們在寫 FastAPI
時,會有寫 TypeScript
的既視感
FastAPI 之於 其他 python 後端框架架,就像 typescript 之於 javascript (單指的是語法層面)
FastAPI 的優點:
- 速度快
- 比 django / flask 快上約 5 ~ 10 倍
- 支援 async / await
- 內建支援 OpenAPI (Swagger) 規範
- 在開發初期測試時非常方便!
- 內建型別檢查
- 有
TypeScript
的感覺
- 有
- 容易測試
- 有提供
TestClient
,並可以透過pytest
進行測試
- 有提供
- 豐富文件與社群
- FastAPI document 提供許多教學與範例
- 也有許多人整合 FastAPI 與其他套件,例如: