繁體中文 | English
基於 FastAPI 的簡易部落格後端 API。原為臺北市立大學校務系統協作計畫團隊 Backend & SRE 徵選小作業。
blog-api/
├── app/
│ ├── routers/
│ │ ├── __init__.py
│ │ ├── blog.py
│ │ └── login.py
│ ├── __init__.py
│ ├── crud.py
│ ├── database.py
│ ├── models.py
│ └── schemas.py
├── sql/
│ └── init.sql
├── .dockerignore
├── .env.template
├── docker-compose.yml
├── Dockerfile
├── LICENSE
├── README.md
├── requirements.txt
└── run.py
POST /login:使用者登入。參數為email和password,分別為使用者帳號和密碼。登入成功後會回傳一個效期 30 天的 JWT,欄位包含使用者 Email 、 憑證之 Issuer 、 Expiration Time 、 Not Before。
GET /blog/all:列舉所有文章(標題、內文、標籤)。GET /blog/page/{page}:列舉分頁文章(標題、內文、標籤)。參數為pagesize,非必填,用於設定每頁文章數,預設值為 10。POST /blog/create:新增文章。會驗證 JWT,若驗證失敗將回傳 401 狀態。 Request 攜帶之 data 需為 JSON,當中包含title(字串)、content(字串) 和tags(陣列,元素為字串),分別為文章之標題、內文和標籤。
- Python 3.10+
- MySQL 8.0+
- 安裝依賴
pip install -r requirements.txt- 啟動應用
uvicorn app:app --reload後端啟動後,API 服務將運行於 http://127.0.0.1:8000,並可透過 http://127.0.0.1:8000/docs 查看 Swagger UI 文件。
- 打開 MySQL Command Line 並登入。
- 執行 SQL Script。
source D://Simple-Blog-API/sql/init.sql註:
D://Simple-Blog-API/sql/init.sql應替換為init.sql實際的絕對路徑。
啟動 Docker Compose 容器。
docker compose up -d --build應用啟動後:
- API 服務將運行於 http://localhost:8000,並可透過 http://localhost:8000/docs 查看 Swagger UI 文件。
- MySQL 服務將運行於 http://localhost:3307。
本服務需定義如下環境變數:
DATABASE_URL:MySQL 資料庫連線字串。JWT_ISSUER:JWT 發行者(可選,如未設定則預設為fastapi)。SECRET_KEY:JWT 秘鑰(可選,如未設定則啟動服務時將自動產生)。
請將 .env.template 檔案複製為 .env 檔案,並在 .env 檔案中修改上述環境變數值。
請於 docker-compose.yml 檔案中,在 app 的 environment 欄位修改上述環境變數值。其中 DATABASE_URL 已經設定,如無必要,建議不要修改以免 API 服務無法連接資料庫。