測驗:FastAPI 教學 #02 建立第一個 API
共 5 題,點選答案後會立即顯示結果
1. 建立 FastAPI 應用程式需要安裝哪兩個套件?
2. 在以下指令中,main:app 代表什麼意思?
3. FastAPI 自動生成的 Swagger UI 文件位於哪個網址?
4. 以下程式碼中,@app.get("/") 的作用是什麼?
5. 啟動伺服器時加上 --reload 參數的好處是什麼?
前言
上一篇我們了解了為什麼 FastAPI 值得學習。這篇文章將帶你從零開始,安裝必要套件、建立第一個 API、並使用自動生成的文件來測試它。
環境建置
首先,我們需要安裝兩個套件:
# 使用 uv(推薦)
uv pip install fastapi uvicorn
# 或使用 pip
pip install fastapi uvicorn
Code language: PHP (php)這段程式碼在做什麼?
fastapi:核心框架,提供路由、請求處理等功能uvicorn:ASGI 伺服器,負責接收 HTTP 請求並傳給 FastAPI 處理
你可以把 FastAPI 想像成餐廳的廚房,而 Uvicorn 是門口的服務生,負責接待客人(HTTP 請求)並把訂單送進廚房。
Hello World 範例
建立一個檔案 main.py:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"message": "Hello, World!"}
Code language: JavaScript (javascript)逐行解讀:
| 程式碼 | 說明 |
|---|---|
from fastapi import FastAPI |
從 fastapi 套件匯入 FastAPI 類別 |
app = FastAPI() |
建立一個 FastAPI 應用程式實例 |
@app.get("/") |
裝飾器,表示這個函式處理 GET 請求到 “/” 路徑 |
def read_root(): |
定義處理函式,名稱可自訂 |
return {"message": "Hello, World!"} |
回傳字典,FastAPI 自動轉成 JSON |
關於 @app.get("/")
這是 Python 的裝飾器(decorator)語法。@app.get("/") 做的事情是:
- 告訴 FastAPI:「當有人用 GET 方法請求
/路徑時,執行下面這個函式」
啟動伺服器
在終端機執行:
uvicorn main:app --reload
Code language: CSS (css)這個指令的結構是什麼?
| 部分 | 說明 |
|---|---|
uvicorn |
啟動 ASGI 伺服器 |
main:app |
main 是檔案名稱(main.py),app 是裡面的 FastAPI 實例變數名稱 |
--reload |
開啟熱重載,檔案修改後自動重啟伺服器 |
執行後你會看到類似這樣的輸出:
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO: Started reloader process [12345]
INFO: Started server process [12346]
INFO: Waiting for application startup.
INFO: Application startup complete.
Code language: HTTP (http)這表示伺服器已經在 http://127.0.0.1:8000 上運行了。
測試 API
打開瀏覽器,輸入 http://127.0.0.1:8000,你會看到:
{"message": "Hello, World!"}
Code language: JSON / JSON with Comments (json)恭喜!你已經成功建立並運行了第一個 FastAPI 應用。
自動生成的 API 文件
FastAPI 最吸引人的功能之一,就是自動生成互動式 API 文件。
Swagger UI
打開 http://127.0.0.1:8000/docs:
你會看到一個互動式的 API 文件頁面。在這裡你可以:
- 查看所有可用的端點(endpoints)
- 點擊展開查看詳細資訊
- 直接在網頁上測試 API(點擊「Try it out」按鈕)
ReDoc
打開 http://127.0.0.1:8000/redoc:
這是另一種風格的文件,適合閱讀和分享給其他開發者或團隊成員。
兩種文件的差異:
| 文件 | 網址 | 特色 |
|---|---|---|
| Swagger UI | /docs |
互動式,可直接測試 API |
| ReDoc | /redoc |
閱讀友善,適合作為參考文件 |
熱重載開發體驗
還記得啟動時的 --reload 參數嗎?現在來體驗它的好處。
修改 main.py,新增一個端點:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"message": "Hello, World!"}
@app.get("/items/{item_id}")
def read_item(item_id: int):
return {"item_id": item_id}
Code language: JavaScript (javascript)存檔後,觀察終端機:
INFO: Detected file change in 'main.py'. Reloading...
INFO: Started server process [12347]
INFO: Waiting for application startup.
INFO: Application startup complete.
Code language: HTTP (http)伺服器自動重啟了!你不需要手動停止再啟動。
現在訪問 http://127.0.0.1:8000/docs,你會看到新的端點已經出現在文件中。
關於新增的端點:
@app.get("/items/{item_id}")
def read_item(item_id: int):
return {"item_id": item_id}
Code language: JavaScript (javascript)| 程式碼 | 說明 |
|---|---|
/items/{item_id} |
路徑參數,{item_id} 是變數 |
item_id: int |
型別提示,FastAPI 會自動驗證並轉換為整數 |
試試訪問 http://127.0.0.1:8000/items/42,你會得到:
{"item_id": 42}
Code language: JSON / JSON with Comments (json)如果訪問 http://127.0.0.1:8000/items/abc(非數字),FastAPI 會自動回傳錯誤訊息:
{
"detail": [
{
"type": "int_parsing",
"loc": ["path", "item_id"],
"msg": "Input should be a valid integer, unable to parse string as an integer",
"input": "abc"
}
]
}
Code language: JSON / JSON with Comments (json)這就是 FastAPI 的型別驗證,完全自動處理!
重點整理
| 項目 | 內容 |
|---|---|
| 安裝套件 | fastapi(框架)+ uvicorn(伺服器) |
| 建立應用 | app = FastAPI() |
| 定義端點 | @app.get("/path") 裝飾器 + 處理函式 |
| 啟動伺服器 | uvicorn main:app --reload |
| API 文件 | /docs(Swagger UI)、/redoc(ReDoc) |
| 熱重載 | --reload 參數,修改檔案自動重啟 |
下一步
現在你已經能夠建立和運行 FastAPI 應用了。下一篇我們將深入了解路由與路徑參數的更多用法,包括查詢參數和請求體的處理。
進階測驗:FastAPI 教學 #02 建立第一個 API
共 5 題,包含情境題與錯誤診斷題。