Skip to content

Latest commit

 

History

History
179 lines (138 loc) · 8.15 KB

Day01.md

File metadata and controls

179 lines (138 loc) · 8.15 KB

[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 的基本用法

在 Day10 ~ Day16 : 在 FastAPI 中使用 SQLAlchemy 和 Depends injection

在 Day17 ~ Day20 : 實作 OAuth2 + JWT 登入機制

在 Day21 ~ Day23 : 以 Pytest 來撰寫 Unit Test 和 Docker Compose 來部署專案

在 Day24 ~ Day26 : 以 Redis 實作 Server Side Cache

在 Day27 ~ Day29 : 實作 Primary Replica 架構

在 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 是由 :

這兩個框架作為基礎搭建的

FastAPI 優點

速度快

django / flask / FastAPI 大比拼

  • web framework benchmark 中查詢這三個框架的比較,可見 FastAPI 比 django / flask 快上約 5 ~ 10 倍
    • 在 Request / Second 的圖表:
    • 在 Average Latency 的圖表:

內建支援 async function

並且 FastAPI 支援 async function

@app.get("/async")
async def async_hello_world():
    return "Hello World"

@app.get("/sync")
def sync_hello_world():
    return "Hello World"

內建支援 OpenAPI (Swagger) 規範

跑起 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 (單指的是語法層面)

Summary

FastAPI 的優點:

  • 速度快
    • 比 django / flask 快上約 5 ~ 10 倍
    • 支援 async / await
  • 內建支援 OpenAPI (Swagger) 規範
    • 在開發初期測試時非常方便!
  • 內建型別檢查
    • TypeScript 的感覺
  • 容易測試
    • 有提供 TestClient ,並可以透過 pytest 進行測試
  • 豐富文件與社群
reference